Pagini recente » Cod sursa (job #1261945) | Cod sursa (job #2873801) | Cod sursa (job #3272515) | Cod sursa (job #212379) | Cod sursa (job #447892)
Cod sursa(job #447892)
#include<stdio.h>
#include<vector>
using namespace std;
#define NMAX 202
#define CMAX 12
#define KMAX 101
#define MOD 30103
//int V[NMAX];
int P[CMAX];
vector< int > C[CMAX];
int F[CMAX][NMAX],M[2][NMAX][KMAX];
//I am but a shadow
int main()
{
freopen("diviz.in","r",stdin);
freopen("diviz.out","w",stdout);
int K,A,B;
scanf("%d%d%d\n",&K,&A,&B);
int N=0;
char ch;
int cfr;
for( int i=0; i<=9; ++i ) P[i]=-1;
while( scanf("%c",&ch)!=EOF )
{
cfr=(int)ch-48;
//V[ ++N ]=cfr;
C[ cfr ].push_back( ++N );
P[cfr]=0;
}
//initializare a matricei F[cifra][pozitia i]
//prima pozitia a cifrei in V[] dupa i
int i,j,r,p,x;
for( i=0; i<=N; ++i )
{
for( x=0; x<=9; ++x )
{
if( P[x]==-1 ) continue;
if( i==C[x][ P[x] ] )
{ ++P[x];
if( P[x]==C[x].size() )
{
P[x]=-1;
continue;
}
}
F[x][i]=C[x][ P[x] ];
}
}
//initializarea mega-matricei S[j][i][r]
//cazul j=1,i=0;
int k1=0,k2=1;
for( p=1; p<=9; ++p )
M[k1][ F[p][0] ][ p%K ]=1;
int ans=0;
for( j=1; j<=B; ++j )
{
//if( !k1 ) k1=1,k2=0;
//else k1=0,k2=1;
for(i=j; i<=N; ++i)
for(r=0; r<K; ++r)
M[k2][i][r]=0;
for( i=j; i<=N; ++i )
{
for( r=0; r<K; ++r )
{
if( !M[k1][i][r] ) continue;
for( p=0; p<=9; ++p )
{
if( F[p][i] )
{
int a1=F[p][i],a2=((r*10)+p)%K; // Oh, the shame
M[k2][a1][a2]=(M[k2][a1][a2]+M[k1][i][r])%MOD;
//M[j+1][ F[p][i] ][ ((r*10)+p)%K ]+=M[j][i][r];
}
}
}
if( j>=A )
ans=(ans+M[k1][i][0])%MOD;
}
k1^=k2;k2^=k1;k1^=k2;
}
printf("%d\n",ans%MOD);
return 0;
}