题干:
链接:https://ac.nowcoder.com/acm/contest/551/F
来源:牛客网
题目描述
CSL 有一个神奇的无穷实数序列,他的每一项满足如下关系:
对于任意的正整数 n ,有 , 并且 。
CSL 很清楚这样的序列是唯一的,他现在想考考你,你能快速告诉他这个序列的第 n 项是多少吗?
为了不让你感到难过,对每次询问你只要输出 倍的 对 998244353 取模后的结果即可。
输入描述:
第一行有两个整数 w 和 q ,其中 w 的含义如题意所述, q 表示接下来的询问次数。
接下来的 q 行,每行输入一个数 n 。
输出描述:
对于每一次询问, 在一行输出一个整数 v ,表示
示例1
输入
复制
1 2
1
2
输出
复制
1
3
解题报告:
先预处理了2的幂次和阶乘,然后直接推公式发现没啥规律,但是把这个东西乘到推出来的公式里,就发现了规律。发现前几项分别是1,3,15,105,945,咦这样一看也没啥规律啊,但是拆开看,就是:1 , 1*3 , 1*3*5 , 1*3*5*7 , 1*3*5*7*9。。。当然这只是系数,后面还要乘个w。
不过这题其实是可以用母函数的知识证明的
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e6 + 5;
ll ans[MAX];
const ll mod = 998244353;
int main()
{ans[1] = 1;for(int i = 2; i<=1000000; i++) {ans[i] = ans[i-1] * (2LL*i - 1);ans[i] %= mod;}ll w,q,x;cin>>w>>q;while(q--) {scanf("%d",&x);printf("%lld\n",(ans[x]*w)%mod);}return 0 ;
}