zoukankan      html  css  js  c++  java
  • [LGP2000] 拯救世界

    6的倍数 1/(1-x^6)
    最多9块 (1-x^10)/(1-x)
    最多5块 (1-x^6)/(1-x)
    4的倍数 1/(1-x^4)
    最多7块 (1-x^8)/(1-x)

    2的倍数 1/(1-x^2)
    最多1块 (1-x^2)/(1-x) (=1+x)
    8的倍数 1/(1-x^8)
    10的倍数 1/(1-x^10)
    最多3块 (1-x^4)/(1-x)

    分子 1
    分母 (1-x)(1-x)(1-x)(1-x)(1-x)

    这等于(sum_{i=0}^{+infty} pmatrix{5+i-1\i} x^i)
    总共n块,取第n项结果为C(n+4,n)=n*(n+1)*(n+2)*(n+3)/26

    二项式定理相关参见

    #include <bits/stdc++.h>
    #define ll long long 
    using namespace std;
    const int N=1e6+10;
    const int mod=998244353;
    
    struct Num {
    	int a[N],len;
    	int&operator[](const int&x){return a[x];}
    	const int&operator[](const int&x)const{return a[x];}
    	void write() {
    		for(int i=len-1; ~i; --i) printf("%d",a[i]);
    		putchar('
    ');
    	}
    } A,E;
    char str[N];
    
    int w[N*2],rev[N*2],lmt;
    inline int qpow(int x,int y) {
    	register int c=1;
    	for(; y; y>>=1,x=(ll)x*x%mod) if(y&1) c=(ll)c*x%mod;
    	return c;
    }
    void init(int n) {
    	int l=0; lmt=1;
    	while(lmt<=n) lmt<<=1,l++;
    	for(int i=0; i<lmt; ++i) rev[i]=(rev[i>>1]>>1)|((i&1)<<(l-1));
    	int tmp=lmt>>1,wlmt=qpow(3,(mod-1)>>l); w[tmp]=1;
    	for(int i=tmp+1; i<lmt; ++i) w[i]=(ll)w[i-1]*wlmt%mod;
    	for(int i=tmp-1; i; --i) w[i]=w[i<<1];
    	lmt=l;
    }
    inline int getLen(int n) {return 1<<(32-__builtin_clz(n));}
    inline void DFT(int a[],int len) {
    	static unsigned long long tmp[N];
    	int u=lmt-__builtin_ctz(len),T;
    	for(int i=0; i<len; ++i) tmp[rev[i]>>u]=a[i];
    	for(int m=1; m<len; m<<=1) 
    		for(int i=0,s=m<<1; i<len; i+=s)
    			for(int j=0; j<m; ++j) 
    				T=tmp[i+j+m]*w[m+j]%mod,tmp[i+j+m]=tmp[i+j]+mod-T,tmp[i+j]+=T;
    	for(int i=0; i<len; ++i) a[i]=tmp[i]%mod;
    }
    inline void IDFT(int a[],int len) {
    	reverse(a+1,a+len), DFT(a,len);
    	long long T=mod-(mod-1)/len;
    	for(int i=0; i<len; ++i) a[i]=T*a[i]%mod;
    }
    
    int main() {
    	scanf("%s",str);
    	for(int i=0; str[i]; ++i) A[A.len++]=str[i]-'0';
    	reverse(A.a,A.a+A.len);
    	E[E.len=1,0]=1;
    	init(A.len*4);
    	for(int T=4,p; T--;) {
    		for(A[p=0]++; A[p]>9; ++p) A[p+1]++,A[p]=0;
    		while(A[A.len]) A.len++;
    		int len=getLen(A.len+E.len);
    		DFT(A.a,len); 
    		DFT(E.a,len);
    		for(int i=0; i<len; ++i) E[i]=1LL*A[i]*E[i]%mod;
    		IDFT(A.a,len);
    		IDFT(E.a,len); 
    		for(p=0; p<len; ++p) E[p+1]+=E[p]/10,E[p]%=10;
    		while(!E[p]) p--; E.len=p+1;
    	}
    	//E.write();
    	for(int i=E.len-2; ~i; --i) {
    		A[i]=(E[i+1]*10+E[i])/24;
    		E[i]=(E[i+1]*10+E[i])%24;
    	}
    	assert(!E[0]);
    	A.len=E.len-1;
    	while(!A[A.len-1]) A.len--;
    	A.write();
    	return 0;
    }
    
  • 相关阅读:
    meta标签
    Vue(day8)
    Vue(day7)
    Vue(day6)
    Flex布局
    Vue(day5)
    jquery.data()&jquery.extend()
    Promise对象
    Vue(day4)
    Vue(day3)
  • 原文地址:https://www.cnblogs.com/nosta/p/11094864.html
Copyright © 2011-2022 走看看