Cod sursa(job #342026)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 20 august 2009 13:51:54
Problema Diviz Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 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]+=c1[j][k];
					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]-=c[x][j][k];
				if (c2[j][k]<Mod)
					c2[j][k]+=Mod;
				c[x][j][k]+=c2[j][k];
				if (c[x][j][k]>=Mod)
					c[x][j][k]-=Mod;
				c1[j][k]+=c2[j][k];
				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;
	
}