Cod sursa(job #1141341)

Utilizator barbuionBarbu Ion barbuion Data 12 martie 2014 19:58:39
Problema Diviz Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#include <string.h>
#define MOD 30103
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
int s[202];
int cif[202][10],i,j,n,a1,b1,k,a[202][10],b[202][10],l,p,suma;
char ch;
int main()
{
    f>>k>>a1>>b1;
    while(f>>ch)
        s[++n]=ch-'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<=b1;l++){
      memset(b,0,sizeof(b));
      // parcurgem matricea a
         for(i=1;i<n;i++)
            for(j=0;j<=k-1;j++)
               if(a[i][j]!=0){
                 //parcurgem linia i a lui cif
                 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>=a1){
            for(i=0;i<=n;i++)
                suma=(suma+b[i][0])%MOD;
        }
        memcpy(a,b,sizeof(b));

    }
    g<<suma;
    return 0;
}