Pagini recente » Cod sursa (job #2553258) | Cod sursa (job #1969146) | Cod sursa (job #1908635) | Cod sursa (job #1527272) | Cod sursa (job #2606628)
#include <iostream>
#include <bits/stdc++.h>
#define ull unsigned long long int
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
const int mod=30103;
int main()
{
int k,a,b,sol=0;
f>>k>>a>>b;
string n;
f>>n;
vector<vector<int> > dp1(n.size()+5,vector<int>(k+1,0));
vector<vector<int> > dp2(n.size()+5,vector<int>(k+1,0));
vector<vector<int> > aux(n.size()+5,vector<int>(k+1,0));
vector<vector<int> > nxt(n.size()+5,vector<int>(10,-1));
vector<int> last(10,-1);
cout<<dp1[1][2];
for(int i=n.size()-1;i>=0;i--)
{
for(int j=0;j<10;j++)
{
nxt[i][j]=last[j];
}
last[n[i]-'0']=i;
}
for(int j=1;j<=9;j++)
{
if(last[j]!=-1)
{
dp1[last[j]][j%k]=1;
}
}
for(int i=1;i<=n.size();i++)
{
for(int j=i-1;j<n.size();j++)
{
if(i>=a&&i<=b)
{
sol+=dp1[j][0];
sol=sol%mod;
}
for(int r=0;r<k;r++)
{
if(dp1[j][r]!=0)
{
for(int d=0;d<=9;d++)
{
int poz=nxt[j][d];
if(poz!=-1)
{
int newrest=(r*10+d)%k;
dp2[poz][newrest]+=dp1[j][r];
dp2[poz][newrest]=dp2[poz][newrest]%mod;
}
}
}
}
}
dp1=dp2;
dp2=aux;
}
g<<sol<<'\n';
}