Pagini recente » Cod sursa (job #2671097) | Cod sursa (job #72113) | Cod sursa (job #352505) | Cod sursa (job #2448913) | Cod sursa (job #984004)
Cod sursa(job #984004)
#include <fstream>
#include <string.h>
#define NRM 30103
#define MAXN 205
#define MAXM 105
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
int m,a,b,n,nxt[MAXN][15],x,pd[2][MAXN][MAXM],act,sol,restx10[15],rest;
char s[MAXN];
int main(){
int i,j,k,ii;
f>>m>>a>>b;
f.getline(s+1,MAXN,'\n');
f.getline(s+1,MAXN,'\n');
n=strlen(s+1);
for(i=0;i<10;i++)
restx10[i]=(i*10)%m;
for(i=n;i>=1;i--){
x=s[i]-'0';
for(j=0;j<10;j++)
nxt[i][j]=nxt[i+1][j];
nxt[i][x]=i;}
for(i=1;i<10;i++)
if(nxt[1][i]){
x=nxt[1][i];
for(j=0;j<10;j++)
if(nxt[x+1][j]){
rest=restx10[i]+j;
while(rest>=m)
rest-=m;
pd[1][nxt[x+1][j]][rest]++;}
if(a==1&&i%m==0)
sol++;}
act=1;
for(k=2;k<=b;k++){
for(i=k-1;i<=n;i++){
for(j=0;j<m;j++){
if(k>=a){
sol+=pd[act][i][0];
while(sol>=NRM)
sol-=NRM;}
if(pd[act][i][j]){
while(pd[act][i][j]>=NRM)
pd[act][i][j]-=NRM;
for(ii=0;ii<10;ii++)
if(nxt[i+1][ii]){
rest=restx10[j]+ii;
while(rest>=m)
rest-=m;
pd[1-act][nxt[i+1][ii]][rest]+=pd[act][i][j];}
pd[act][i][j]=0;}}}
act=1-act;}
g<<sol<<'\n';
f.close();
g.close();
return 0;}