• BZOJ 3326: [Scoi2013]数数


    数位DP,然而式子真的复杂

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int mod=20130427;
    int ans,B,N,A[100005],Suf[100005][2],Szsuf[100005][2],Sum[100005][2],a[100005];
    int calc(){
    	int suf=0,sum=0;
    	for (int i=1; i<=N; i++){
    		suf=(1ll*suf*B%mod+1ll*A[i]*i%mod)%mod;
    		(sum+=suf)%=mod;
    	}
    	return sum;
    }
    int solve(){
    	for (int i=1; i<=N; i++){
    		int C=B;
    		if (i==1) C=0;
    		a[i]=1ll*(C-1)+1ll*a[i-1]*B%mod+A[i];
    		a[i]%=mod;
    		Szsuf[i][0]=Szsuf[i-1][0]+1;
    		Szsuf[i][0]%=mod;
    		Szsuf[i][1]=1ll*C-1+1ll*(Szsuf[i-1][1]+a[i-1])*B%mod+1ll*(Szsuf[i-1][0]+1)*A[i]%mod;
    		Szsuf[i][1]%=mod;
    		Suf[i][1]=1ll*Suf[i-1][1]*B%mod+1ll*A[i]*Szsuf[i][0]%mod;
    		Suf[i][1]%=mod;
    		Suf[i][0]=1ll*C*(C-1)/2%mod+1ll*Suf[i-1][0]*B%mod*B%mod+1ll*B*(B-1)/2%mod*(Szsuf[i-1][1]+a[i-1])%mod;
    		Suf[i][0]%=mod;
    		Suf[i][0]+=1ll*Suf[i-1][1]*B%mod*A[i]%mod+1ll*A[i]*(A[i]-1)/2%mod*Szsuf[i][0]%mod;
    		Suf[i][0]%=mod;
    		Sum[i][1]=Sum[i-1][1]+Suf[i][1];
    		Sum[i][1]%=mod;
    		Sum[i][0]=1ll*Sum[i-1][0]*B%mod+1ll*Sum[i-1][1]*A[i]%mod+Suf[i][0];
    		Sum[i][0]%=mod;
    	}
    	return (Sum[N][0]+Sum[N][1])%mod;
    }
    int main(){
    	scanf("%d",&B);
    	scanf("%d",&N);
    	for (int i=1; i<=N; i++) scanf("%d",&A[i]);
    	ans-=solve();
    	ans+=calc();
    	scanf("%d",&N);
    	for (int i=1; i<=N; i++) scanf("%d",&A[i]);
    	ans%=mod;
    	ans+=solve();
    	(ans+=mod)%=mod;
    	printf("%d
    ",ans);
    	return 0;
    }
    

      

     
  • 相关阅读:
    【转】iOS深入学习(Block全面分析)
    iOS—请求Web Service
    iOS设计模式——MVC
    iOS基础知识
    iOS学习——常用博客
    【转】使用segue页面间传递数据
    【转】storyboard之 prepareForSegue:sender:
    【转】NSDictionary和NSMutableDictionary用法详解
    配置.pch文件
    MKNetworkKit下载图片并显示在UIImageView上
  • 原文地址:https://www.cnblogs.com/silenty/p/9849065.html
Copyright © 2020-2023  润新知