2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F Trig Function(切比雪夫多项式)

来源:互联网 发布:西北师大知行学院分布 编辑:程序博客网 时间:2024/05/29 18:50

题目链接:Trig Function
题意:求给定n后,问sin(nx)多项式中,x^m项的系数是多少。
思路:切比雪夫多项式,可以把cos(nx)展开为系数不为0的每一项的累加。如图:
这里写图片描述
注意”!!”不是阶乘的阶乘,而是不超过n且与n具有相同奇偶性的所有正整数连乘积。

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<stack>#include<vector>#include<cmath>#include<map>#include<set>#include<cstdlib>#define mem(a,b) memset(a,b,sizeof(a))typedef long long ll;using namespace std;const int MOD = 998244353;const int maxn = 1e4+10;ll fact[maxn] = {1};//factorial阶乘void init(){    for(int i = 1; i < maxn; i++){        fact[i] = i*fact[i-1]%MOD;    }}ll inverse(ll x,int q){    ll ret = 1;    while(q){        if(q%2 == 1){            ret = ret*x%MOD;        }        x = x*x%MOD;        q /= 2;    }    return ret;}int main(){    init();    int n,m;    while(~scanf("%d%d",&n,&m)){        if(m > n) puts("0");        else if(n%2 == 1 && m%2 == 0 || n%2 == 0 && m%2 == 1){            puts("0");        }else{            //应该留意的是,当n是偶数,m对应切比雪夫多项式中的2k            //当n是奇数,m对应切比雪夫多项式中的2k-1,公式里对应的换为m            if(m >= 1){                /*求n*(n+m-2)!!/(n-m)!! 由于(n+m-2) >= (n-m),所以从(n-m+1) 遍历的 (n+m-1)*/                ll fz = n%MOD;                for(int i = n-m+1; i <= n+m-1; i++){                    if(i%2 == (n+m-2)%2){                        fz = fz*i%MOD;                    }                }                ll ans = fz*inverse(fact[m],MOD-2)%MOD;/*逆元:fz/fact[m]%MOD = fz*inverse(fact[m],mod-2);*/                if((n-m)/2%2) ans = -ans;                printf("%lld\n",(ans+MOD)%MOD);            }else{                /*求(n+m-2)!!/(n-m)!! 由于(n+m-2) < (n-m),所以从(n+m-1) 遍历的 (n-m)*/                ll fm = 1;                for(int i = n+m-1; i <= n-m; i++){                    if(i%2 == (n+m-2)%2){                        fm = fm*i%MOD;                    }                }                ll ans = n%MOD*inverse(fact[m],MOD-2)%MOD*inverse(fm,MOD-2)%MOD;                if((n-m)/2%2) ans = -ans;                printf("%lld\n",(ans+MOD)%MOD);            }        }    }    return 0;}
阅读全文
0 0
原创粉丝点击