Mai intai trebuie sa te autentifici.
Cod sursa(job #1141408)
Utilizator | Data | 12 martie 2014 21:01:49 | |
---|---|---|---|
Problema | Diviz | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.97 kb |
#include <fstream>
#include <string.h>
#define modulo 30103
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
char c;
int cif[202][10], i, j, n, a[202][101], b[202][101], k, nr[202], l, p, a1, b1, s;
int main()
{
f>>k>>a1>>b1;
while (f>>c)
nr[++n]=c-'0';
for (i=n-1; i>=0; i--) {
memcpy(cif[i], cif[i+1], sizeof(cif[i+1]));
cif[i][nr[i+1]]=i+1;
}
for(i=1; i<=9; i++)
if(cif[0][i]!=0)
a[ cif[0][i] ][ i%k ]++;
for (l=2; l<=b1; l++) {
memset(b, 0, sizeof(b));
for(i=1; i<=n; i++)
for(j=0; j<=k-1; j++)
if(a[i][j]!=0)
for(p=0; p<=9; p++)
if(cif[i][p]!=0)
b[ cif[i][p] ][ (j*10+p)%k ]=(b[ cif[i][p] ][ (j*10+p)%k ]+a[i][j])%modulo;
if(l>=a1)
for(i=0; i<=n; i++)
s=(s+b[i][0])%modulo;
memcpy(a, b, sizeof(b));
}
g<<s;
return 0;
}