比赛总结

@辣鸡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 }
View Code

相关文章: