Pagini recente » Cod sursa (job #377376) | Cod sursa (job #1898124) | Cod sursa (job #1773126) | Cod sursa (job #1772736) | Cod sursa (job #1962974)
#include <iostream>
#include <fstream>
using namespace std;
string s;
const int mod=30103;
int modes[2][205][105],lst[205][10],v[205],sum[105];
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(idx=0;idx<k;idx++)
if(sum[idx])
{
wh=(idx*10+v[j])%k;
modes[use][j][wh]+=sum[idx];
if(modes[use][j][wh]>=mod)
modes[use][j][wh]-=mod;
}
for(idx=0;idx<k;idx++)
{
sum[idx]-=modes[1-use][lst[j][v[j]]][idx];
if(sum[idx]<0) sum[idx]+=mod;
sum[idx]+=modes[1-use][j][idx];
if(sum[idx]>=mod) sum[idx]-=mod;
}
}
for(idx=0;idx<k;idx++)
sum[idx]=0;
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;
}