Pagini recente » Cod sursa (job #91172) | Cod sursa (job #2626843) | Cod sursa (job #2860132) | Cod sursa (job #1441848) | Cod sursa (job #1141379)
#include <fstream>
#include <string.h>
#define MOD 30103
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
short int s[206];
short int cif[205][10],i,j,n,a1,b1,k,a[2][205][101],b[205][101],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--){
for(int j=0;j<10;j++)
cif[i][j]=cif[i+1][j];
cif[i][s[i+1]]=i+1;
}
for(i=1;i<=9;i++)
if(cif[0][i]!=0)
a[1][cif[0][i]][i%k]++;
for(l=2;l<=b1;l++){
memset(a[l%2],0,sizeof(a[l%2]));
// parcurgem matricea a
for(i=l-1;i<n;i++){
for(j=0;j<=k-1;j++)
if(a[1-l%2][i][j]!=0){
//parcurgem linia i a lui cif
for(p=0;p<=9;p++)
if(cif[i][p]!=0){
a[l%2][cif[i][p]][(j*10+p)%k]=(a[l%2][cif[i][p]][(j*10+p)%k]+a[1-l%2][i][j]);
if( a[l%2][cif[i][p]][(j*10+p)%k]>=MOD)
a[l%2][cif[i][p]][(j*10+p)%k]-=MOD;
}
}
}
if(l>=a1){
for(i=l;i<=n;i++){
suma=(suma+a[l%2][i][0]);
if(suma>=MOD)
suma=suma-MOD;
}
}
// memcpy(a,b,sizeof(b));
}
g<<suma;
return 0;
}