Cod sursa(job #342029)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 20 august 2009 13:53:33
Problema Diviz Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <cstdio>
#include <cstring>

#define file_in "diviz.in"
#define file_out "diviz.out"

#define Nmax 210
#define Mmax 110
#define Mod 30103

int N,A,K,B,i,j,nr,x,k,r;
char s[Nmax];
int c1[Nmax][Mmax];
int c2[Nmax][Mmax];
int c[10][Nmax][Mmax];

int main()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d %d", &K,&A,&B);
	scanf("%s", s+1);
	N=strlen(s+1);
	
	
	memset(c1,0,sizeof(c1));
	memset(c,0,sizeof(c));
	
	for (i=1;i<=N;++i)
	{
		x=s[i]-'0';

		for (j=1;j<=B;++j)
			for (k=0;k<K;++k)
				c2[j][k]=0;

		if (x>0)
			c2[1][x%K]=1;

		for (j=1;j<B;++j)
			for (k=0;k<K;++k)
				if (c1[j][k])
				{
					r=(k*10+x)%K;
					c2[j+1][r]=(c2[j][k]+c1[j][k])%Mod;
					/*if (c2[j+1][r]>=Mod)
						c2[j+1][r]-=Mod;*/
				}

		for (j=1;j<=B;++j)
			for (k=0;k<K;++k)
			{
				c2[j][k]=(c2[j][k]-c[x][j][k]+Mod)%Mod;
				/*if (c2[j][k]<Mod)
					c2[j][k]+=Mod;*/
				c[x][j][k]=(c[x][j][k]+c2[j][k])%Mod;
				/*if (c[x][j][k]>=Mod)
					c[x][j][k]-=Mod;*/
				c1[j][k]=(c1[j][k]+c2[j][k])%Mod;
				/*if (c1[j][k]>=Mod)
					c1[j][k]-=Mod;*/
			}
	}
	
	
	int cnt=0;
	
	for (i=A;i<=B;++i)
	{
		cnt=(cnt+c1[i][0])%Mod;		
	}
	
		
	printf("%d", cnt);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}