Pagini recente » Cod sursa (job #1134234) | Cod sursa (job #2165956) | Cod sursa (job #2237613) | Cod sursa (job #1615832) | Cod sursa (job #6936)
Cod sursa(job #6936)
#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;
for (i=1; i<=N; i++) {
int c = nr[i-1] - '0';
if (c != 0) aux[i][c%K]=1;
}
for (L=2; L<=B; L++) {
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 (k=0; k<K; k++) {
int bb = k * 10 + c; bb%=K;
v[i][bb]= (v[i][bb] + aux[j][k])%30103;}
}
//deci am facut totate v[i][K] .. duuuh?
}
if (L >=A) {
int usa[10];
for (i=0; i<=9; i++) usa[i] = 0;
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;
}