写了这么多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 }