Pagini recente » Cod sursa (job #1486335) | Cod sursa (job #1638003) | Cod sursa (job #1395896) | Cod sursa (job #2435709) | Cod sursa (job #2093459)
#include <fstream>
#include <cstring>
#define MOD 30103
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
int mod, a, b, n, s;
int dp[2][205][102], next[12][205], last[12];
char sir[205];
void reset(int t){
for(int i = 1; i <= n; ++ i)
for(int k = 0; k < mod; ++ k)
dp[t][i][k] = 0;
}
int main()
{
f>>mod>>a>>b;
f>>sir + 1;
n = strlen(sir + 1);
for(int i = 1; i <= n; ++ i)
sir[i] -= '0';
for(int i = n; i >= 1; -- i){
last[sir[i]] = i;
for(int j = 0; j <= 9; ++ j)
next[j][i] = last[j];
}
for(int i = 1; i <= 9; ++ i)
dp[1][next[i][1]][i % mod] = 1;
int t = 1;
for(int j = 1; j <= b; ++ j){
for(int i = 1; i <= n; ++ i){
for(int k = 0; k < mod; ++ k){
if(dp[t][i][k])
for(int cif = 0; cif <= 9; ++ cif){
dp[1 - t][next[cif][i + 1]][(k * 10 + cif) % mod] += dp[t][i][k];
dp[1 - t][next[cif][i + 1]][(k * 10 + cif) % mod] %= MOD;
}
}
if(j >= a && j <= b)
s = (s + dp[t][i][0]) % MOD;
}
reset(t);
t = 1 - t;
}
g<<s;
return 0;
}