Pagini recente » Cod sursa (job #1924097) | Cod sursa (job #171099) | Cod sursa (job #2270974) | Cod sursa (job #207636) | Cod sursa (job #910969)
Cod sursa(job #910969)
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
ifstream cin("diviz.in");
ofstream cout("diviz.out");
const int mod = 30103, KMAX = 100, NMAX = 202;
int K, A, B;
int L;
string N;
int dp[2][NMAX][KMAX];
int T[NMAX][10];
void getMod(int &val){ val -= val < mod ? 0 : mod;}
int solve() {
memset(T,-1,sizeof(T));
for(int c = 0;c < 10;c++) {
int t = -1;
for(int i = L;i > 0;i--) {
t = ((N[i - 1] - '0') == c ? i - 1 : t);
T[i - 1][c] = t;
}
}
for(int c = 0;c < 10;c++) {
if(T[0][c] != -1) {
dp[0][T[0][c]][c%K] = 1;
}
}
int line = 0;
int ret = 0;
for(int l = 1;l <= B;l++,line = 1 - line) {
for(int i = 0;i < L;i++) {
if(A <= l) {
ret += dp[line][i][0];
getMod(ret);
}
if(l == B) continue;
for(int r = 0, nextR;r < K;r++) {
for(int c = 0;c < 10;c++) {
if(T[i + 1][c] == -1) continue;
nextR = (r*10 + c)%K;
dp[1 - line][T[i + 1][c]][nextR] += dp[line][i][r];
getMod(dp[1 - line][T[i + 1][c]][nextR]);
}
dp[line][i][r] = 0;
}
}
}
return ret;
}
int main()
{
cin>>K>>A>>B;
cin.get();
getline(cin,N);
L = (int)N.size();
cout<<solve();
return 0;
}