Pagini recente » Cod sursa (job #137876) | Cod sursa (job #2055357) | Cod sursa (job #1549852) | Cod sursa (job #546516) | Cod sursa (job #22150)
Cod sursa(job #22150)
#include<fstream.h>
#include<string.h>
int n,sol[10][10][10],nr[100],k,s[100],a,b;
void citire()
{char s1[100],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()
{int i,viz[100],j;
memset(viz,0,sizeof(viz));
viz[0]=1;
for(i=1;i<=n;i++)
{if(!viz[s[i]])
{viz[s[i]]=1;
sol[i][s[i]%k][1]+=1;
}
for(j=0;j<k;j++)
sol[i][j][1]+=sol[i-1][j][1];
}
nr[1]=sol[n][0][1];
}
void dinamica()
{int last[10],m,i,j,ddd;
for(m=2;m<=b;m++)
{memset(last,0,sizeof(last));
for(i=0;i<n;i++)
{for(j=0;j<k;j++)
{ddd=(j*10+s[i+1])%k;
sol[i+1][ddd][m]+=(sol[i][j][m-1]-sol[last[s[i+1]]][j][m-1]);
sol[i+1][j][m]+=sol[i][j][m];
}
last[s[i+1]]=i;
}
nr[m]=sol[n][0][m];
}
}
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;
}