Cod sursa(job #1584853)

Utilizator SilviuIIon Silviu SilviuI Data 30 ianuarie 2016 15:40:15
Problema Diviz Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
#include <cstring>
#define mod 30103

using namespace std;

int l,n,k,a,b;
int t[210];
char s[210];
int dp[2][110][210];

int main()
{
    freopen("diviz.in","r",stdin);
    freopen("diviz.out","w",stdout);
    scanf("%d %d %d ",&k,&a,&b);
    gets(s+1); n=strlen(s+1);
    for (int i=1;i<=n;i++) t[i]=s[i]-48;
    l=1; dp[0][0][0]=1;
    for (int i=1;i<=n;i++) {
        memset(dp[l],0,sizeof(dp[l]));
        for (int j=0;j<i;j++) {
            for (int p=0;p<k;p++) {
                if (t[i]>0) dp[l][p][j]=(dp[1-l][p][j]+dp[l][p][j])%mod;
                dp[l][(p*10+t[i])%k][j+1]=(dp[l][(p*10+t[i])%k][j+1]+dp[1-l][p][j])%mod;
            }
        }
        l=1-l;
    }
    int sol=0;
    for (int i=a;i<=b;i++) sol=(sol+dp[1-l][0][i])%mod;
    printf("%d",sol);
    return 0;
}