Pagini recente » Cod sursa (job #1584235) | Cod sursa (job #1322931) | Cod sursa (job #490390) | Cod sursa (job #2847648) | Cod sursa (job #22161)
Cod sursa(job #22161)
#include<fstream.h>
#include<string.h>
unsigned int long n,sol[202][202],sol1[202][202],nr[202],k,s[202],a,b;
void citire()
{char s1[202],i;
ifstream f("diviz.in");
f>>k>>a>>b;
f>>s1;
n=strlen(s1);
for(i=1;i<=strlen(s1);i++)
s[i]=s1[i-1]-'0';
f.close();
}
void initializare()
{unsigned int i,viz[202],j;
memset(viz,0,sizeof(viz));
viz[0]=1;
for(i=1;i<=n;i++)
{if(!viz[s[i]])
{viz[s[i]]=1;
sol1[i][s[i]%k]+=1;
}
for(j=0;j<k;j++)
sol1[i][j]+=sol1[i-1][j];
}
nr[1]=sol1[n][0];
}
void dinamica()
{unsigned int last[10],m,i,j,ddd;
for(m=2;m<=b;m++)
{memset(last,0,sizeof(last));
for(i=0;i<=n;i++)
memset(sol[i],0,sizeof(sol[i]));
for(i=0;i<n;i++)
{for(j=0;j<k;j++)
{ddd=(j*10+s[i+1])%k;
sol[i+1][ddd]=(sol[i+1][ddd]+sol1[i][j]-sol1[last[s[i+1]]][j])%30103;
sol[i+1][j]=(sol[i+1][j]+sol[i][j])%30103;
}
sol1[i][j]=(sol1[i][j]+sol1[last[s[i+1]]][j])%30103;
last[s[i+1]]=i;
}
nr[m]=sol[n][0];
for(i=0;i<=n;i++)
memcpy(sol1[i],sol[i],sizeof(sol[i]));
}
}
void afisare()
{int i;
ofstream g("diviz.out");
for(i=a+1;i<=b;i++)
nr[a]+=nr[i];
g<<nr[a];
g.close();
}
int main()
{citire();
initializare();
dinamica();
afisare();
return 0;
}