Cod sursa(job #360100)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 29 octombrie 2009 19:11:35
Problema Diviz Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#include <cstring>
#define lm 210
#define X 30103

int p[11][lm][lm], a[lm][lm], b[lm][lm], v[lm], k, aa, bb, t, n;
char s[lm];

int main()
{
	freopen("diviz.in","r",stdin);
	freopen("diviz.out","w",stdout);
	scanf("%d %d %d\n",&k,&aa,&bb);
	scanf("%s",s);
	n=strlen(s);
	int i, j, r, x, c;
	for (i=0; i<n; i++) v[i+1]=s[i]-'0';
	for (i=1; i<=n; i++)
	{
		c=v[i]%k;
		if (v[i]) a[1][c]=1;
		for (j=2; j<=i; j++)
		{
			for (r=0; r<k; r++)
			{
				x=10*r%k+c;
				x=x%k;
				a[j][x]+=b[j-1][r];
				if (p[v[i]][0][0]) a[j][x]-=p[v[i]][j][x];
			}
		}
		p[v[i]][0][0]++;
		for (j=1; j<=i; j++)
			for (r=0; r<k; r++) p[v[i]][j][r]=a[j][r];
		for (j=1; j<=n; j++)
			for (r=0; r<k; r++) 
			{
				b[j][r]+=a[j][r];
				a[j][r]=0;
			}
	}
	for (i=aa; i<=bb; i++) t+=b[i][0];
	printf("%d",t);
}