Cod sursa(job #1141830)

Utilizator TibixbAndrei Tiberiu Tibixb Data 13 martie 2014 10:43:03
Problema Diviz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream>
#include<cstring>
using namespace std;
# define MOD 30103
int k, A, B, s[203], i, j, l, p, n, cif[203][10], a[203][101], b[203][101], sol;
char x;
ifstream in("diviz.in");
ofstream out("diviz.out");
int main(){
    in>>k>>A>>B;
    while(in>>x){
        s[++n]=x-'0';
    }
    for(i=n-1; i>=0; i--){
        memcpy(cif[i], cif[i+1], sizeof(cif[i+1]));
        cif[i][s[i+1]]=i+1;
    }
    for(i=1;i<=9;i++)
       if(cif[0][i]!=0)
           a[cif[0][i]][i%k]++;

    for(l=2;l<=B;l++){
       memset(b,0,sizeof(b));
       for(i=1;i<=n;i++)
         for(j=0;j<=k-1;j++)
             if(a[i][j]!=0)
                {
                    for(p=0;p<=9;p++)
                       if(cif[i][p]!=0)
                          b[cif[i][p]][(j*10+p)%k]=(b[cif[i][p]][(j*10+p)%k]+a[i][j])%MOD;

                }
          if(l>=A)
             //adunam ce avem pe coloana 0 in b
             for(j=0;j<=n;j++)
                sol=(sol+b[j][0])%MOD;
         memcpy(a,b,sizeof(b));

    }
    out<<sol;
    return 0;
}