Pagini recente » Cod sursa (job #409438) | Cod sursa (job #1297711) | Cod sursa (job #2045934) | Cod sursa (job #717873) | Cod sursa (job #6984)
Cod sursa(job #6984)
/*
Pt toti fanii mei ;) ...
..eh comentarii prea multe ca am imbunatatit de la n^3*k la altceva ..lol
*/
#include <stdio.h>
//using namespace std;
int A, B, K, N;
int ret;
int v[201][101];
int aux[201][101];
char nr[300];
void in() {
freopen("diviz.in", "r", stdin);
scanf("%d %d %d\n", &K, &A, &B);
scanf("%s", &nr);
for (int i=0; nr[i]; i++) N++;
}
void out() {
freopen("diviz.out", "w", stdout);
printf("%d\n", ret);
fclose(stdout);
};
int main() {
in();
int i, j, k, L;
int lu[10];
for (i=0; i<10; i++) lu[i] = 0;
for (i=1; i<=N; i++) {
int c = nr[i-1] - '0';
if (c!=0 && c % K ==0 && A == 1 && lu[c] ==0) { lu[c] = 1; ret++;}
if (c != 0) aux[i][c%K]=1;
}
for (L=2; L<=B; L++) {
for (i=0; i<10; i++) lu[i] = 0;
for (i=1; i<L; i++) lu[nr[i-1]-'0'] = i;
for (i = L; i<=N; i++) {
int c = nr[i-1] - '0';
//int usa[10];
//for (j=0; j<=9; j++) usa[j] = 0;
//fale pe alea care se termina in i
//for (j=i-1; j>=L-1; j--) if (usa[nr[j-1]-'0'] == 0) {
// usa[nr[j-1]-'0'] = 1;
for (j=0; j<=9; j++) if (lu[j])
for (k=0; k<K; k++) {
int bb = k * 10 + c; bb%=K;
v[i][bb]= (v[i][bb] + aux[lu[j]][k])%30103;}
//}
//deci am facut totate v[i][K] .. duuuh?
lu[c]=i;
}
if (L >=A) {
//int usa[10];
//for (i=0; i<=9; i++) usa[i] = 0;
for (i=0; i<=9; i++) if (lu[i]) ret = (ret + v[lu[i]][0])%30103;
//for (i=N; i>=1; i--) if (usa[nr[i-1]-'0'] == 0) {usa[nr[i-1]-'0'] = 1; ret=(ret + v[i][0])%30103;}
}
for (i=1; i<=N; i++) for (j=0; j<K; j++) aux[i][j] = v[i][j], v[i][j] = 0;
//copie auxu
}
out();
return 0;
}