比赛总结
@辣鸡lfw,一开始算三角形那题没想到正解使用莫队乱搞,然后要选出50个最大的时候还用莫队。。。主席树区间第k大什么的完全忘记了
题解
1001 Another Chess Problem
unsolved
1002 Beauty Of Unimodal Sequence
unsolved
1003 Coefficient
unsolved
1004 Double Tree
unsolved
1005 Everying is Generated In Equal Probability
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 #define mod 998244353 5 const int maxn=3000; 6 const int maxm=3010; 7 int n; 8 ll sum,f[maxm],rav[maxm],b[maxm]; 9 ll Pow(ll x,int n) 10 { 11 ll ans=1; 12 while(n) 13 { 14 if(n&1)ans=ans*x%mod; 15 n>>=1; 16 x=x*x%mod; 17 } 18 return ans; 19 } 20 ll C(int a,int b){return (f[a]*rav[b]%mod)*rav[a-b]%mod;} 21 void Init() 22 { 23 sum=0; f[0]=rav[0]=1; 24 for(ll i=1;i<=maxn;i++)f[i]=f[i-1]*i%mod; 25 rav[maxn]=Pow(f[maxn],mod-2); 26 for(ll i=maxn-1;i;i--) rav[i]=rav[i+1]*(i+1)%mod; 27 } 28 /////////// 求组合数和逆元 29 30 int main() 31 { 32 while(~scanf("%d",&n)) 33 { 34 Init(); 35 36 ll r=Pow(4,mod-2),k,x,y; 37 for(ll i=2;i<=n;++i) 38 { 39 x=Pow(2,i); 40 y=Pow(Pow(2,i)-1,mod-2); 41 k=x*y%mod; 42 b[i]=k*((i*(i-1)%mod)*r%mod)%mod; 43 for(int j=0;j<i;++j) b[i]=(b[i]+(y*C(i,j)%mod)*b[j]%mod)%mod; 44 sum=(sum+b[i])%mod; 45 } 46 sum=sum*Pow(n,mod-2)%mod; 47 48 printf("%lld\n",sum); 49 } 50 return 0; 51 }