求调
查看原帖
求调
1232811
liuty0506楼主2024/11/29 15:41
#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
char c[15000007];
int a[15000007],dp[15000007],to[15000007];
int tong[15000007];
int main(){
    //freopen("p11140.txt","r",stdin);
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int n=0;//while(cin>>c[++n]);n--;
    string s;
    cin>>s;n=s.size();
    for(int i=1;i<=n;i++){
        a[i]=s[i-1]-'0';
    }
    int l=1;to[1]=1;
    for(int i=2;i<=n;i++){
    	int sum=0,now=a[i];
		for(int j=i-1;j>=l;j--){
			//tong[qzh[i]-qzh[j-1]];
			now+=a[j];
			if(tong[now]++)	sum++;
		} 
        while(sum){
        	now=a[l];
			for(int j=l+1;j<=i;j++){
				//tong[qzh[j]-qzh[l-1]]--;
				now+=a[j];
				if(--tong[now])	sum--;
			}
			l++;
		}
		to[i]=l;
    }
    /*for(int i=1;i<=n;i++){
        cout<<to[i]<<" ";
    }cout<<endl;*/
    dp[0]=1;
    for(int i=1;i<=n;i++){
        for(int j=i;j>=to[i];j--){
            //dp[i]+=dp[j-1];
            //if(dp[i]>mod)   dp[i]-=mod;
            dp[i]=dp[i]+dp[j-1];
            dp[i]=(dp[i]>mod?dp[i]-mod:dp[i]);
        }
    }
    cout<<dp[n]%mod;
    return 0;
}
2024/11/29 15:41
加载中...