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

链接:https://ac.nowcoder.com/acm/contest/551/F
来源:牛客网

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

对于任意的正整数 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

输出描述:

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

示例1

 

输入
1 2
1
2
输出
1
3
 

 

input
1 2
1
2
output
1
3

看图:

CSL 的神奇序列(“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)_第1张图片

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
const int MAX=998244353;
const int M=1e6+7;
ll a[M];
int main()
{
    ll w,q,i,j,k;
    cin>>w>>q;
    a[0]=w;
    ll p=1;
    for(i=1;i<=M;i++)
    {
        a[i]=(a[i-1]%MAX*p%MAX)%MAX;//要用到同余定理
        p+=2;
        p%MAX;
    }
    while(q--)
    {
        cin>>k;
        cout<

 

你可能感兴趣的:(个人赛)