Pagini recente » Sandbox (cutiuţa cu năsip) | j | Cod sursa (job #1666480) | Cod sursa (job #2837026) | Cod sursa (job #390886)
Cod sursa(job #390886)
#include<stdio.h>
#include<vector>
using namespace std;
#define NMAX 242
#define CMAX 12
#define KMAX 101
#define MOD 30103
//int V[NMAX];
int P[CMAX];
vector< int > C[CMAX];
int F[CMAX][NMAX],M[NMAX][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;
for( p=1; p<=9; ++p )
M[1][ F[p][0] ][ p%K ]=1;
int ans=0;
for( j=1; j<=B; ++j )
{
for( i=j; i<=N; ++i )
{
for( r=0; r<K; ++r )
{
if( !M[j][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[j+1][a1][a2]=(M[j+1][a1][a2]+M[j][i][r])%MOD;
//M[j+1][ F[p][i] ][ ((r*10)+p)%K ]+=M[j][i][r];
}
}
}
if( j>=A )
ans=(ans+M[j][i][0])%MOD;
}
}
printf("%d\n",ans%MOD);
return 0;
}