Pagini recente » Cod sursa (job #871414) | Cod sursa (job #2832313) | Cod sursa (job #2030577) | Cod sursa (job #956067) | Cod sursa (job #2606965)
#include <bits/stdc++.h>
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
const int MOD=30103;
int k,a,b,lung;
int mat[2][205][105],sol;
int nxt[11][205];
bool OK=1;
string s;
void init()
{
for(int i=1;i<=200;i++)
for(int j=0;j<=100;j++)
mat[1-OK][i][j]=0;
}
void prec()
{
for(int cif=0;cif<=9;cif++)
{
nxt[cif][lung+1]=lung+1;
for(int i=lung;i>=0;i--)
{
nxt[cif][i]=nxt[cif][i+1];
if(s[i+1]==cif+'0') nxt[cif][i]=i+1;
}
}
for(int cif=1;cif<=9;cif++)
if(nxt[cif][0]<lung+1) mat[1][nxt[cif][0]][cif%k]++;
}
int main()
{
f>>k>>a>>b;
f>>s;
lung=s.length();
s=" "+s;
prec();
for(int lungime=1;lungime<=b;lungime++)
{
init();
for(int i=1;i<=lung;i++)
{
for(int j=0;j<k;j++)
if(mat[OK][i][j])
{
for(int c=0;c<10;c++)
if(nxt[c][i]<lung+1)
{
mat[1-OK][nxt[c][i]][(j*10+c)%k]=(mat[1-OK][nxt[c][i]][(j*10+c)%k]+mat[OK][i][j])%MOD;
}
}
}
if(lungime>=a)
for(int i=1;i<=lung;i++)
sol=(sol+mat[OK][i][0])%MOD;
OK=1-OK;
}
if(nxt[0][0]<lung+1&&a==1) sol++;
g<<sol;
}