“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛----F-CSL的神奇序列

本文主要是介绍“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛----F-CSL的神奇序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先发出题目链接:
链接:https://ac.nowcoder.com/acm/contest/551/F
来源:牛客网
涉及:打表


题目如下:
题目
描述
对于这种题,一般都是在草稿纸上找规律,找到了规律,代码就OK了

首先说一说这么高大上的题目表达的什么意思:

∑ k = 0 n a k a n − k = w 2 \sum_{k=0}^{n}a_{k}a_{n-k}=w^{2} k=0nakank=w2
这个公式用中文理解起来就是,从k=0到k=n的所有akan-k乘积的和等于w2这个常数。
(比如当n=3时, ∑ k = 0 n a k a n − k ( n = 3 ) = a 0 a 3 + a 1 a 2 + a 2 a 1 + a 3 a 0 = w 2 \sum_{k=0}^{n}a_{k}a_{n-k}(n=3)=a_{0}a_{3}+a_{1}a_{2}+a_{2}a_{1}+a_{3}a_{0}=w^{2} k=0nakank(n=3)=a0a3+a1a2+a2a1+a3a0=w2
,又如当n=2时, ∑ k = 0 n a k a n − k ( n = 2 ) = a 0 a 2 + a 1 a 1 + a 2 a 0 = w 2 \sum_{k=0}^{n}a_{k}a_{n-k}(n=2)=a_{0}a_{2}+a_{1}a_{1}+a_{2}a_{0}=w^{2} k=0nakank(n=2)=a0a2+a1a1+a2a0=w2

懂了公式的意思,就可以开始找规律了,我们首先知道了a0=w,而且n只能为正整数,不仅如此,题目还有爱的告诉我们序列是唯一的。

所以
当n=1时,得到方程式 w ∗ a 1 + a 1 ∗ w = w 2 w*a_{1}+a_{1}*w=w^{2} wa1+a1w=w2,解得 a 1 = w 2 a_{1}=\frac{w}{2} a1=2w
当n=2时,得到方程式 w ∗ a 2 + w 2 ∗ w 2 + a 2 ∗ w = w 2 w*a_{2}+\frac{w}{2}*\frac{w}{2}+a_{2}*w=w^{2} wa2+2w2w+a2w=w2,解得 a 2 = 3 w 8 a_{2}=\frac{3w}{8} a2=83w
当n=3时,得到方程式 w ∗ a 3 + w 2 ∗ 3 w 8 + 3 w 8 ∗ w 2 + a 3 ∗ w = w 2 w*a_{3}+\frac{w}{2}*\frac{3w}{8}+\frac{3w}{8}*\frac{w}{2}+a_{3}*w=w^{2} wa3+2w83w+83w2w+a3w=w2,解得 a 3 = 5 w 16 a_{3}=\frac{5w}{16} a3=165w
·
·

三个数据压根找不到规律,但是题目说为了让我们不难受,只让我们输出 2 n n ! 2^{n}n! 2nn!倍的an,那么可以找到 2 n n ! 2^{n}n! 2nn!倍an的规律


下面表格是部分数值
(其中 b n = 2 n n ! ∗ a n b_{n}=2^{n}n! * a_{n} bn=2nn!an):

n a n a_{n} an b n b_{n} bn b n b_{n} bn b n − 1 b_{n-1} bn1的关系
1 w 2 \frac{w}{2} 2w w w w-----
2 3 w 8 \frac{3w}{8} 83w 3 w 3w 3w b n = 3 b n − 1 b_{n}=3b_{n-1} bn=3bn1
3 5 w 16 \frac{5w}{16} 165w 15 w 15w 15w b n = 5 b n − 1 b_{n}=5b_{n-1} bn=5bn1
4 35 w 128 \frac{35w}{128} 12835w 105 w 105w 105w b n = 7 b n − 1 b_{n}=7b_{n-1} bn=7bn1
5 63 w 256 \frac{63w}{256} 25663w 945 w 945w 945w b n = 9 b n − 1 b_{n}=9b_{n-1} bn=9bn1

通过以上表格,可以通过不完全归纳法得到数列 b n b_{n} bn的递推式(这个也可以用数学归纳法求证):

b n + 1 = [ ( 2 n − 1 ) ( b n m o d 998244353 ) ] m o d 998244353 b_{n+1}=[(2n-1)(b_{n} mod 998244353)] mod 998244353 bn+1=[(2n1)(bn mod 998244353)] mod 998244353 b 1 = w b_{1}=w b1=w

有了递推关系,可以把数据范围了所有的 b n b_{n} bn存到数组 b b b里面,然后直接拿出来用就可以了!


代码如下:

#include <iostream>
#define mod 998244353//取模值
#define size 1000005//数组b大小
using namespace std;
typedef long long ll;
ll b[size];
int w,q,t;//w,q均为题目中的变量,t是每次访问数组输入的值
void getb(ll b[]){//通过递推式得到数组bfor(int i=1;i<=1e6;i++)b[i+1]=(b[i]%mod*(2*i+1))%mod;//递推式
}
int main(){cin>>w>>q;b[1]=w;//初始条件getb(b);//得到数组bwhile(q--){scanf("%d",&t);printf("%lld\n",b[t]);//访问数组b}return 0;
}

这篇关于“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛----F-CSL的神奇序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/586589

相关文章

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

uva 10131 最长子序列

题意: 给大象的体重和智商,求体重按从大到小,智商从高到低的最长子序列,并输出路径。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vect

POJ1631最长单调递增子序列

最长单调递增子序列 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokenizer;publ

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

认知杂谈52

今天分享 有人说的一段争议性的话 I I 1拓展人脉很重要** 咱们活在这世上啊,得明白一件事儿,知识、逻辑能力和实战经验虽然重要,但确实都不是最关键的。真正关键的是要懂得怎么和那些手里有资源的人打交道。人脉那可真是一笔无形的大财富呢。你想想看,有时候一个有影响力的人帮你一把,那效果可比你累死累活干一年都强得多。 I I 就比如说,你要是认识个行业里的大牛,他可能给你介绍个特别好的工

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

day-50 求出最长好子序列 I

思路 二维dp,dp[i][h]表示nums[i] 结尾,且有不超过 h 个下标满足条件的最长好子序列的长度(0<=h<=k),二维数组dp初始值全为1 解题过程 状态转换方程: 1.nums[i]==nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h]+1) 2.nums[i]!=nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h-1

基于SSM+Vue+MySQL的可视化高校公寓管理系统

系统展示 管理员界面 宿管界面 学生界面 系统背景   当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前,不接受信息改革带来的信息技术的企业随时面临被淘汰,被取代的风险。所以当今,各个行业领域,不管是传统的教育行业