Cod sursa(job #1336152)

Utilizator akaprosAna Kapros akapros Data 6 februarie 2015 20:16:12
Problema Diviz Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,i,j,k,p,q,l,sol;
int w[15][201];
int a[201][101];
int v[201];
char s[201];
int main()
{
    freopen("diviz.in","r",stdin);
    freopen("diviz.out","w",stdout);
    scanf("%d %d %d\n",&k,&p,&q);
    gets(s+1);
    n=strlen(s+1);
    for (i=1;i<=n;i++)
    {
        v[++v[0]]=s[i]-'0';
        w[v[v[0]]][i]=1;
    }
    a[0][0]=1;
    for (i=1;i<=n;i++)
    for (l=min(i,q);l>=1;l--)
    {
        if (l==1&&v[i]==0) continue;
        for (j=0;j<k;j++)
        //if (a[l-1][j])
        {
            a[l][((j*10)+v[i])%k]
            =(a[l][((j*10)+v[i])%k]+a[l-1][j]
              -w[v[i]][l][((j*10)+v[i])%k]+30103)%30103;
           W[v[i]][l][((j*10)+v[i])%k]
            =(w[v[i]][l][((j*10)+v[i])%k]+a[l-1][j])%30103;
        }
        memcpy(w,W,sizeof(W));
    }
    sol=0;
    for (l=p;l<=q;l++)
    sol=(sol+a[l][0])%30103;
    printf("%d",sol);
    return 0;
}