Cod sursa(job #973962)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 16 iulie 2013 10:03:13
Problema Diviz Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;

#define NMAX 201
#define KMAX 101
#define MOD 30103

int d[NMAX][NMAX][KMAX],first[11][NMAX];
char c[NMAX+1];

int main ()
{
	int n,i,j,k,sol,a,b,rest,last;
	ifstream f("diviz.in");
	ofstream g("diviz.out");
	f>>k>>a>>b;
	f>>(c+1);
	f.close();
	n=strlen(c+1);
	first[c[n]-48][n]=n;
	for(i=n-1;i>=1;i--) {
		for(j=0;j<=9;j++)
			first[j][i]=first[j][i+1];
		first[c[i]-48][i]=i;
	}
	for(i=1;i<=9;i++)
		d[first[i][1]][1][i%k]=1;
	for(i=1;i<=n;i++)
		for(j=1;j<=b-1;j++)
			for(rest=0;rest<=k-1;rest++) {
				if(d[i][j][rest]==0)
					continue;
				for(last=0;last<=9;last++)
					if(first[last][i+1])
						d[first[last][i+1]][j+1][(rest*10+last)%k]+=d[i][j][rest];
			}
	sol=0;
	for(i=1;i<=n;i++)
		for(j=a;j<=b;j++)
			sol=sol+d[i][j][0];
	g<<sol%MOD;
	return 0;
}