2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F

来源:互联网 发布:售后服务网络 编辑:程序博客网 时间:2024/06/18 08:11
f(cos(x))=cos(nx) holds for all xxx.

Given two integers nnn and mmm, you need to calculate the coefficient of xmx^mxm in f(x)f(x)f(x), modulo 998244353998244353998244353.

Input Format

Multiple test cases (no more than 100100100).

Each test case contains one line consisting of two integers nnn and mmm.

1≤n≤109,0≤m≤1041 \le n \le 10^9,0 \le m \le 10 ^ 41n109,0m104.

Output Format

Output the answer in a single line for each test case.

样例输入

2 02 12 2

样例输出

99824435202

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<map>#include<cstdlib>#include<string>#include<set>#include<stack>#define mod 998244353using namespace std;int n, k;long long  PowerMod(long long  a, long long  b = mod - 2, long long c = mod){    long long  ans = 1;    a = a % c;    while(b>0)    {        if(b & 1)            ans = (ans * a) % c;        b >>= 1;        a = (a * a) % c;    }    return ans;}void xishu(){    long long ans = 1;    if((n & 1) + (k & 1) == 1)    {        cout << 0 << endl;        return ;    }    else    {        int tmp = (n - k) / 2;        if(tmp & 1)            ans = -1;        else            ans = 1;    }    for(int i = 1; i <= k; i++)    {        ans = ans * PowerMod(i) % mod;    }    int low = min(n + k - 2, n - k);    int high = max(n + k - 2, n - k);    if(n + k - 2 <= n - k)    {        for(int i = high ; i > low ; i -= 2)        {            ans = ans * PowerMod(i) % mod;        }    }    else    {        for(int i = high; i > low; i -= 2)        {            ans = ans * i % mod;        }    }    ans = ans * n % mod;    cout << (ans + mod) % mod << endl;}int main(){    while(~scanf("%d %d", &n, &k))    {        xishu();    }    return 0;}



阅读全文
0 0