Pagini recente » Cod sursa (job #1681919) | Cod sursa (job #297879) | Cod sursa (job #57791) | Cod sursa (job #2286048) | Cod sursa (job #1769048)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
const int maxn=205;
const int MOD=30103;
int K,A,B,N,sol;
int c[3][maxn][102],v[maxn],urm[12][maxn];
char s[maxn];
int main()
{
int i,j;
f>>K>>A>>B;
f>>(s+1);
N=strlen(s+1);
for (i=1;i<=N;i++)
v[i]=s[i]-'0';
for (i=0;i<=9;i++)
for (j=N;j>=1;j--)
{
if (v[j]==i)
urm[i][j]=j;
else urm[i][j]=urm[i][j+1];
}
for (i=1;i<=9;i++)
c[1][urm[i][1]][i%K]=1;
for (i=1;i<=B;i++)
{
memset (c[(i+1)&1],0,sizeof(c[(i+1)&1]));
for (j=i;j<=N;j++)
{
for (int k=0;k<K;k++)
{
if (c[i&1][j][k]==0) continue;
for (int p=0;p<=9;p++)
if (urm[p][j+1]!=0)
c[(i+1)&1][urm[p][j+1]][(k*10+p)%K]=(c[(i+1)&1][urm[p][j+1]][(k*10+p)%K]+c[i&1][j][k])%MOD;
}
if (i>=A)
sol=(sol+c[i&1][j][0])%MOD;
}
}
g<<sol;
}