XDOJ-1113-Too Light(dp)

来源:互联网 发布:电子设计软件有哪些 编辑:程序博客网 时间:2024/04/29 07:53

题目链接:XDOJ-1113-Too Light

dp[i][j] 为以 a[i] 结束的子串中,模 k 等于 j 的子串数。
状态转移方程为

dp[i][(j10+a[i])%k]+=dp[i][j]

初始化 dp[i][0]=1

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5+7;char s[maxn];int a[maxn];int dp[maxn][57];int main(){    int k,n;    a[0]=0;    while(~scanf("%s %d",s+1,&k))    {        n=strlen(s+1);        for(int i=1;i<=n;i++)            a[i]=s[i]-'0';        memset(dp,0,sizeof(dp));        ll ans=0;        for(int i=1;i<=n;i++)        {            for(int j=0;j<k;j++)                dp[i][(j*10+a[i])%k]+=dp[i-1][j];            ++dp[i][a[i]%k];            ans+=dp[i][0];        }        printf("%lld\n",ans);    }    return 0;}
0 0
原创粉丝点击