Pagini recente » Istoria paginii runda/summer_camp_1 | simulare_shumen_2 | simulare | Autentificare | Cod sursa (job #102968)
Cod sursa(job #102968)
#include <stdio.h>
#include <stdlib.h>
#define L_MAX 10001
#define M_MAX 5001
char v[L_MAX];
long long a[M_MAX],k,ultim;
int L,m,n,s;
int comp(const void *b, const void *c){
return (*(int*)b - *(int*)c );
}
void bin_src(){
int i, step;
for (step=1;step<=m;step<<=1);
for (i=0;step;step>>=1)
if (i+step<=m && a[i+step]<=k)
i+=step;
if (a[i]==k)
s++;
}
/*void bin(int x, int y){
int z;
if (x!=y){
z=(x+y)/2;
if (a[z]==k)
s++;
else
if (a[z]>k)
bin(x,z);
else
bin(z+1,y);
}
else
if (a[x]==k)
s++;
}*/
int main(){
int i;
char x;
FILE *fin=fopen("abc2.in","r");
L=0;
fscanf(fin,"%c",&v[++L]);
while (v[L]!='\n'){
v[L]-='a';
fscanf(fin,"%c",&v[++L]);
}
L--;
n=0;m=0;
fscanf(fin,"%c",&x);
while (x!='\n'){
n++;
x-='a';
a[m]=a[m]*3+x;
fscanf(fin,"%c",&x);
}
if (!feof(fin))
do{
m++;
for (i=1;i<=n;i++){
fscanf(fin,"%c",&x);
a[m]=a[m]*3+(x-'a');
}
fscanf(fin,"\n");
}
while (!feof(fin));
fclose(fin);
for (i=1;i<=L;i++)
printf("%d",v[i]);
printf("\n");
for (i=0;i<=m;i++)
printf("%lld\n",a[i]);
qsort(a,m+1,sizeof(long long),comp);
printf("\n");
for (i=0;i<=m;i++)
printf("%lld\n",a[i]);
k=v[1];ultim=1;
for (i=2;i<=n;i++){
k*=3;
k+=v[i];
ultim*=3;
}
bin_src();
for (i=n+1;i<=L;i++){
k-=ultim*v[i-n];
k*=3;
k+=v[i];
bin_src();
}
FILE *fout=fopen("abc2.out","w");
fprintf(fout,"%d\n",s);
fclose(fout);
return 0;
}