ssoj2424: 编码hard(dp)

来源:互联网 发布:淘宝怎么看下单顺序 编辑:程序博客网 时间:2024/04/29 06:18

题意:给一串数字,可以表示成多少个a(个数)个b(0~9)(内容);

思路:f[ i ]表示以i为末尾内容有多少种。f[ i ]=Σf[ j ](j=2~i-2)且s[ i ]!=s[ j ] && s[ j+1 ]!='0';前缀和,删掉不合法的。

#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <cctype>using namespace std;const int maxn=1000006;const int mod=998244353;char s[maxn];int n,f[maxn],sum=0,del[maxn];int main(){    scanf("%s",s+1);    n=strlen(s+1);    memset(del,0,sizeof(del));    if(s[1]=='0'){printf("0\n");return 0;}    else{sum=0;    for(int i=2;i<=n;++i){s[i]-=48;f[i]=(sum-del[s[i]]+1+mod)%mod;if(s[i]!=0){    sum=(sum+f[i-1])%mod;    del[s[i-1]]=(del[s[i-1]]+f[i-1])%mod;}    }    }printf("%d\n",f[n]);    return 0;}


0 0
原创粉丝点击