Pagini recente » Cod sursa (job #1898705) | Cod sursa (job #385239) | Cod sursa (job #240464) | Cod sursa (job #334492) | Cod sursa (job #7145)
Cod sursa(job #7145)
#include <stdio.h>
#include <string.h>
#include <fstream.h>
#define input "diviz.in"
#define output "diviz.out"
#define nmax 202
#define rest 30103
int k,a,b,i,v[nmax],aux,nr[nmax],d[5];
long sol,n;
char c;
void read()
{
FILE *fin;
fin=fopen(input,"r");
fscanf(fin,"%ld %ld %ld\n",&k,&a,&b);
n=0;
while (!feof(fin))
{
fscanf(fin,"%c",&c);
v[++n]=(int)(c-'0');
}
v[0]=n;
while (!v[0]) v[0]--;
for (i=1;i<=v[0]/2;i++)
{
aux=v[i];
v[i]=v[v[0]-i+1];
v[v[0]-i+1]=aux;
}
fclose(fin);
}
void aduna(int sursa[], int dest[])
{
dest[1]+=sursa[1];
for (i=2;i<=dest[0];i++)
{
dest[i]=dest[i]+sursa[i]+(dest[i-1])/10;
dest[i-1]%=10;
}
dest[0]=dest[0]>sursa[0]?dest[0]:sursa[0];
while (dest[dest[0]]>9)
{
dest[0]++;
dest[dest[0]]=dest[dest[0]-1]/10;
dest[dest[0]-1]%=10;
}
}
inline int calcul()
{
int bun,lb=1;
for (i=1;i<=v[0];i++)
if (v[i]==nr[lb]) lb++;
if (lb==nr[0]+1) bun=1;
else bun=0;
return bun;
}
void solve()
{
short merge=1;
d[1]=k%10;
d[2]=(k%100)/10;
d[3]=k/100;
d[0]=3;
while (!d[d[0]]) d[0]--;
while (merge)
{
aduna(d,nr);
if (nr[0]>=a&&nr[0]<=b)
sol+=calcul();
if (nr[0]>b)
merge=0;
}
}
void write()
{
FILE *fout;
fout=fopen(output,"w");
fprintf(fout,"%ld",sol%rest);
fclose(fout);
}
int main()
{
read();
solve();
write();
return 0;
}