Cod sursa(job #1773502)

Utilizator nnnmmmcioltan alex nnnmmm Data 7 octombrie 2016 21:44:32
Problema Diviz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <cstdio>
#include <cstring>
const int lm=210,km=110,X=30103;

int p[11][lm][km], a[lm][km], b[lm][km], v[lm], k, aa, bb, t, n;
char s[lm];

int main()
{
    freopen("diviz.in","r",stdin);
    freopen("diviz.out","w",stdout);
    scanf("%d %d %d\n",&k,&aa,&bb);
    scanf("%s",s);
    n=strlen(s);
    int i, j, r, x, c;
    for(i=0; i<n; i++)
        v[i+1]=s[i]-'0';
    for(i=1; i<=n; i++)
    {
        c=v[i]%k;
        if (v[i]) a[1][c]=1;
        for (j=2; j<=i; j++)
        {
            for (r=0; r<k; r++)
            {
                x=10*r%k+c;
                x=x%k;
                a[j][x]+=b[j-1][r];
                a[j][x]%=X;
            }
        }
        for (j=1; j<=i; j++)
            for (r=0; r<k; r++)
            {
                if (p[v[i]][0][0]>0)
                {
                    a[j][r]=a[j][r]-p[v[i]][j][r];
                    if (a[j][r]<0) a[j][r]+=X;
                    a[j][r]%=X;
                }
                p[v[i]][j][r]+=a[j][r];
                p[v[i]][j][r]%=X;
            }
        p[v[i]][0][0]++;
        for (j=1; j<=n; j++)
            for (r=0; r<k; r++)
            {
                b[j][r]+=a[j][r];
                b[j][r]%=X;
                a[j][r]=0;
            }
    }
    for (i=aa; i<=bb; i++) t=(t+b[i][0])%X;
    printf("%d",t);
}