Pagini recente » Istoria paginii utilizator/kyrk_dd | autobuz | Profil bkoncsag | Diferente pentru utilizator/dariusdarius intre reviziile 75 si 74 | Cod sursa (job #2979968)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("diviz.in");
ofstream fout("diviz.out");
const int mod = 30103;
int k, a, b, n;
char s[205];
int dp[205][105];
/// dp[i][j] -> numarul de numere distincte formate din i cifre, care dau restul j
int cnt(int nrCif)
{
for(int prefix = 1; prefix <= nrCif; prefix ++)
{
for(int rest = 0; rest <= k - 1; rest ++)
{
for(int cifra = 1; cifra <= n; cifra ++)
{
dp[prefix][(rest * 10 + s[cifra]) % k] += dp[prefix - 1][rest];
dp[prefix][(rest * 10 + s[cifra]) % k] %= mod;
}
}
}
dp[0][0] = 0;
return dp[nrCif][0];
}
int main()
{
fin >> k;
fin >> a >> b;
fin >> (s + 1);
n = strlen(s + 1);
dp[0][0] = 1;
int v1 = cnt(b);
for(int i = 0; i <= 200; i ++)
{
for(int j = 0; j <= 100; j ++)
{
dp[i][j] = 0;
}
}
dp[0][0] = 1;
int v2 = cnt(a - 1);
v1 -= v2;
if(v1 < 0)
{
v1 += mod;
}
fout << v1 << '\n';
return 0;
}