Cod sursa(job #1383837)
Utilizator | Data | 10 martie 2015 18:14:14 | |
---|---|---|---|
Problema | Diviz | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.76 kb |
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin("diviz.in");
ofstream fout("diviz.out");
int k,p,u,i,j,poz,c,r,ii,b[201][100],a[201][100],n,pp[200][10],v[201],t,cif[201][10];
char s[201];
int main()
{
fin>>k>>p>>u;
fin>>s+1;
n=strlen(s+1);
for(i=0;i<=9;i++)
for(j=0;j<n;j++)
for(ii=j+1;ii<=n;ii++)
{
if(s[ii]-'0'==i)
{
pp[j][i]=ii;
break;
}
}
for(c=1;c<=9;c++)
{
poz=pp[0][c];
if(poz)
{
a[poz][c%k]++;
}
v[1]+=a[poz][0];
}
for (int i = 0 ; i <= k ; ++ i)
for (int j = 0 ; j < 10 ; ++ j)
cif[i][j] = (i * 10 + j) % k;
for(i=2;i<=u;i++)
{
for(j=i-1;j<n;j++)
{
for(c=0;c<=9;c++)
{
poz=pp[j][c];
if(poz)
{
for(r=0;r<k;r++)
{
if(a[j][r]!=0)
{
//t=(r*10+c)%k;
b[poz][cif[r][c]]+=a[j][r];
if(b[poz][cif[r][c]]>=30103)
b[poz][cif[r][c]]-=30103;
if(cif[r][c]==0){
v[i]+=a[j][r];
v[i]%=30103;}
}
}
}
}
}
memcpy(a,b,sizeof(a));
memset(b,0,sizeof(b));
}
int sol=0;
for(i=p;i<=u;i++)
sol+=v[i]%30103;
fout<<sol%30103;
return 0;
}