写了这么多tag,其实我一个也不会

A

  第一题是反演……数据范围10W,看着就有种要用FFT等神奇算法的感觉……然而蒟蒻并不会推公式,只好写了20+10分的暴力,然而特判30分的时候好像挂了,所以并没有拿到……20分滚粗了

  最近打暴力搞部分分的时候,写各种情况的判断条件什么的总是出问题……sad……以后还是自己造下数据判一下能不能过吧,不能总是靠人品啊>_>

 

  我还是放弃FFT吧,反正……出来这种题,我也想不到要用FFT & 不会推公式……呵呵哒

 1 //Round5 A
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<iostream>
 6 #include<algorithm>
 7 #define rep(i,n) for(int i=0;i<n;++i)
 8 #define F(i,j,n) for(int i=j;i<=n;++i)
 9 #define D(i,j,n) for(int i=j;i>=n;--i)
10 #define pb push_back
11 using namespace std;
12 typedef long long LL;
13 inline int getint(){
14     int r=1,v=0; char ch=getchar();
15     for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-1;
16     for(; isdigit(ch);ch=getchar()) v=v*10-'0'+ch;
17     return r*v;
18 }
19 const int N=100010,P=998244353;
20 /*******************template********************/
21 
22 LL n,b[N],a[N];
23 LL fac[N],inv[N];
24 LL Pow(LL a,int b){
25     LL r=1;
26     for(;b;b>>=1,a=a*a%P) if (b&1) r=r*a%P;
27     return r;
28 }
29 
30 LL C(int n,int m){
31     return fac[n]*inv[m]%P*inv[n-m]%P;
32 }
33 int main(){
34 #ifndef ONLINE_JUDGE
35     freopen("A.in","r",stdin);
36     freopen("A.out","w",stdout);
37 #endif
38     n=getint();
39     if (n>1000){
40         F(i,0,n) printf("1 "); puts(""); return 0;
41     }
42     fac[0]=fac[1]=1; F(i,2,n) fac[i]=fac[i-1]*i%P;
43     inv[n]=Pow(fac[n],P-2); inv[0]=1;
44     D(i,n-1,1) inv[i]=inv[i+1]*(i+1)%P;
45 
46     F(i,0,n) b[i]=getint();
47     bool sign=1;
48     F(i,0,n) if (b[i]!=C(n+1,i+1)){sign=0; break;}
49     if (sign){F(i,0,n) printf("1 "); puts(""); return 0;}
50     D(i,n,0){
51         F(j,i+1,n) b[i]=((b[i]-C(j,i)*a[j]%P)+P)%P;
52         a[i]=b[i];
53     }
54     F(i,0,n) printf("%lld ",b[i]); puts("");
55     return 0;
56 }
View Code

相关文章: