p5437 [XR-2] Conventions

analysis

https://www.cnblogs.com/cjyyb/p/11111404.html

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e7;
const int mod = 998244353;
int fac[N+20],inv[N+20],pre[N+20],y[N+20],K,ik[N+20],Ans,sur[N+20];
inline int pw(int x,int p){
    int res=1;
    while(p){
      if(p&1)res=res*x%mod;
      x=x*x%mod;p>>=1;
    }
    return res;
}
inline int work(){
    int i,j,k,res=0,wh=((K+1)&1)?mod-1:1;
    for(i=1;i<=K;i++,wh=mod-wh){
      int t=y[i];t=t*wh%mod;
      t=t*inv[i-1]%mod*inv[K-i]%mod;
      t=t*pre[i-1]%mod*sur[i+1]%mod;
      res=(res+t+mod)%mod;
    }
    return res;
}
signed main(){
    int i,j,k,n;
    scanf("%lld%lld",&n,&K);
    K+=3;fac[0]=pre[0]=sur[K+1]=1;
    for(i=1;i<=K;i++)fac[i]=fac[i-1]*i%mod;
    inv[K]=pw(fac[K],mod-2);
    for(i=K-1;i>=0;i--)inv[i]=inv[i+1]*(i+1)% V;
    for (i = 1 ; i <= K; i ++) IK [i] = pw (i, K 3 );
    for (i = 1 ; i <= K; i ++) pre [i] = pre [i- 1 ] * (n-i + v)% v;
    for (i = K; i> = 0 ; i -) sur [i] = sur [i + 1 ] * (n-i + v)% v;
    for (i = 1 ; i <= K; i ++) y [i] = (y [i- 1 ] + (i- 1 ) * IK [i]% v)% v; 
    Ans = (+ Ans Work ())% v;
    for (i = 1 ; i <= K; i ++) y [i] = (y [i- 1 ] + k [ 2 ] * IK [i]% v)%  v;
    Ans = (v + ans-work ())% v;
    for (i = 1 ; i <= K; i ++) y [i] = (y [i- 1 ] + (n + n-i + 1 ) *% v IK [i]% v)% v; 
    Ans = (v + ans-work ())% v;
    for (i = 1 ; i <= K; i ++) pre [i] = pre [i- 1 ] * (n + n-i + v)% v;
    for (i = K; i> = 0 ; i -) sur [i] = sur [i + 1 ] * (n + n-i + v)% v; 
    Ans = (+ Ans Work ())% v; 
    Ans = ans * p W (n, MOD 2 ) v%; printf ( " % lld \ n " , (ans + v)% v);
    return 0;
}

 

Guess you like

Origin www.cnblogs.com/yzxverygood/p/11669404.html