Pagini recente » Istoria paginii runda/imprumut_la_fmi | Cod sursa (job #759751) | Cod sursa (job #2377641) | Cod sursa (job #1330632) | Cod sursa (job #1962957)
#include <iostream>
#include <fstream>
using namespace std;
string s;
const int mod=30103;
int modes[2][205][105],lst[205][10],v[205];
int i,j,ind,idx,k,a,b,n,use,wh,tot;
int main()
{
ifstream f("diviz.in");
ofstream g("diviz.out");
f>>k>>a>>b;
f>>s;
for(i=0;i<s.size();i++)
{
v[i+1]=s[i]-'0';
for(j=0;j<10;j++)
if(!lst[i+1][j])
lst[i+1][j]=lst[i][j];
lst[i+2][s[i]-'0']=i+1;
}//indexare de la 1
n=s.size();
for(j=0;j<10;j++)
if(!lst[n+1][j])
lst[n+1][j]=lst[n][j];
for(i=1;i<=n;i++)
if(v[i]!=0)
{
modes[1][i][v[i]%k]=1;
if(a==1&&v[i]%k==0)
tot++;
}
for(i=2;i<=b;i++)
{
use=i%2;
for(j=1;j<=n;j++)
{
for(idx=0;idx<k;idx++)
modes[use][j][idx]=0;
for(ind=0;ind<10;ind++)
if(lst[j][ind])
{
for(idx=0;idx<k;idx++)
if(modes[1-use][lst[j][ind]][idx])
{
wh=(idx*10+v[j])%k;
modes[use][j][wh]+=modes[1-use][lst[j][ind]][idx];
if(modes[use][j][wh]>=mod)
modes[use][j][wh]-=mod;
}
}
}
if(i>=a)
{
for(j=0;j<10;j++)
{
tot+=modes[use][lst[n+1][j]][0];
if(tot>=mod)
tot-=mod;
}
}
}
g<<tot;
return 0;
}