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

题目传送门:https://ac.nowcoder.com/acm/contest/551/F

题目描述 

CSL 有一个神奇的无穷实数序列,他的每一项满足如下关系:

对于任意的正整数 n ,有 nk=0akank=w2∑k=0nakan−k=w2 , 并且 a0=wa0=w 。

CSL 很清楚这样的序列是唯一的,他现在想考考你,你能快速告诉他这个序列的第 n 项是多少吗?

为了不让你感到难过,对每次询问你只要输出 2nn!2nn! 倍的 anan 对 998244353 取模后的结果即可。

输入描述:

第一行有两个整数 w 和 q ,其中 w 的含义如题意所述, q 表示接下来的询问次数。

接下来的 q 行,每行输入一个数 n 。
 
1w,n1061≤w,n≤106
1q1051≤q≤105

输出描述:

对于每一次询问, 在一行输出一个整数 v ,表示 v=2nn!anmod 998244353v=2nn!⋅anmod 998244353
示例1

输入

复制
1 2
1
2

输出

复制
1
3

解题思路:

直接求出前五项最后结果,推规律,结果是一个奇数项的累乘(1*3*5*7*9* ... *(2*i-1) )

AC code:

 1 #include <bits/stdc++.h>
 2 #define INF 0x3f3f3f3f
 3 #define LL long long
 4 using namespace std;
 5 const int MAXN = 1e6+10;
 6 const LL mod = 998244353;
 7 LL w, ans[MAXN];
 8 int q;
 9 int main()
10 {
11     LL N, res;
12     ans[1] = 1;
13     for(LL i = 2; i < MAXN; i++){
14         ans[i] = ans[i-1]*(2*i-1)%mod;
15         ans[i]%=mod;
16     }
17     scanf("%lld %d", &w, &q);
18     while(q--){
19         scanf("%lld", &N);
20         res = ans[N]*w%mod;
21         printf("%lld
", res);
22     }
23     return 0;
24 }
View Code
原文地址:https://www.cnblogs.com/ymzjj/p/10665299.html