题目传送门:https://ac.nowcoder.com/acm/contest/551/F
题目描述
CSL 有一个神奇的无穷实数序列,他的每一项满足如下关系:
对于任意的正整数 n ,有 n∑k=0akan−k=w2∑k=0nakan−k=w2 , 并且 a0=wa0=w 。
CSL 很清楚这样的序列是唯一的,他现在想考考你,你能快速告诉他这个序列的第 n 项是多少吗?
对于任意的正整数 n ,有 n∑k=0akan−k=w2∑k=0nakan−k=w2 , 并且 a0=wa0=w 。
CSL 很清楚这样的序列是唯一的,他现在想考考你,你能快速告诉他这个序列的第 n 项是多少吗?
为了不让你感到难过,对每次询问你只要输出 2nn!2nn! 倍的 anan 对 998244353 取模后的结果即可。
输入描述:
第一行有两个整数 w 和 q ,其中 w 的含义如题意所述, q 表示接下来的询问次数。
接下来的 q 行,每行输入一个数 n 。
1≤w,n≤1061≤w,n≤106
1≤q≤1051≤q≤105
1≤q≤1051≤q≤105
输出描述:
对于每一次询问, 在一行输出一个整数 v ,表示 v=2nn!⋅anmod 998244353v=2nn!⋅anmod 998244353
解题思路:
直接求出前五项最后结果,推规律,结果是一个奇数项的累乘(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 }