计蒜客 17119 Trig Function(2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F)

来源:互联网 发布:c 编程游戏写法 编辑:程序博客网 时间:2024/05/17 17:46

题目链接:Trig Function

题目大意:给定f(cos(x))=cos(nx),求cosm的系数

题目思路:首先我们有这样一个公式,然后直接套公式做就好了,做双阶乘的时候需要去约分一下
这里写图片描述

#include <map>#include <set>#include <cmath>#include <queue>#include <stack>#include <vector>#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const ll maxn = 1e4+10;const ll mod = 998244353;ll quick_mod(ll a,ll b,ll mod){    ll ans = 1;    while(b)    {        if(b&1)            ans = (ans*a)%mod;        a = (a*a)%mod;        b >>= 1;    }    return ans;}ll fun(ll a,ll b){    ll ans = 1;    for(ll i = a;i <= b;i+=2)        ans = ans*i%mod;    return ans;}ll gun(ll n,ll k){    if(n%2 == 0&&k%2 == 0||n%2 == 1&&k%2 == 1){         ll ans = (n-k)/2;        if(ans&1) return -1;        else return 1;    }    return 0;}ll n,k,mul[maxn];int main(){    mul[1] = 1;    for(ll i = 2;i <= maxn;i++)        mul[i] = mul[i-1]*i%mod;    while(~scanf("%lld%lld",&n,&k)){        if(n < k) {puts("0");continue;}        if(k == 0) {            if(n&1) puts("0");            else{                if((n/2)%2 == 0) puts("1");                else puts("998244352");            }            continue;        }        ll ans1 = fun(n-k+2,n+k-2)*n%mod;        ll ans2 = mul[k]%mod;        ll ans = ans1*quick_mod(ans2,mod-2,mod)%mod;        ans = ans*gun(n,k);        printf("%lld\n",(ans+mod)%mod);    }    return 0;}
阅读全文
0 0
原创粉丝点击