Pagini recente » Cod sursa (job #2762595) | Cod sursa (job #1140129) | Cod sursa (job #1823150) | Cod sursa (job #1305276) | Cod sursa (job #1376898)
#include <iostream>
#include <stdio.h>
using namespace std;
const int N=10000003,M=50001;
const int P=666269;
int val[M],urm[M],lst[M],cuv[M];
char s[N],c[21];
int m,poz,cnt;
unsigned long long puteri[20];
void adauga (int nr, int p){
int r=nr%P;
val[++poz]=nr;
urm[poz]=lst[r];
lst[r]=poz;
cuv[poz]=p;
}
bool caut(int nr){
cout<<nr<<endl;
int r=nr%P;
int p=lst[r];
while(p!=0){
if(val[p]==nr) return 1;
p=urm[p];
}
return 0;
}
int s2[N];
void rez(){
int masca=0,lung=0;
while(s[lung]=='a'||s[lung]=='b'||s[lung]=='c'){
s2[lung]=s[lung]-'a';
lung++;
}
for(int i=0;i<m;i++) masca+=puteri[i]*(s2[i]);
if(caut(masca)) cnt++;
int putere=1;
for(int i=1;i<m;i++) putere=putere*3;
for(int i=m;i<=lung;i++){
masca=masca/3;
masca=masca+(putere*s2[i]);
if(caut(masca)) cnt++;
}
}
void citire(){
FILE *in;
in=fopen("abc2.in","r");
fgets(s,N,in);
int k=1,nr;
fgets(c,21,in);
while(c[m]>='a'&&c[m]<='z') m++;
puteri[0]=1;
for(int i=1;i<=20;i++) puteri[i]=puteri[i-1]*3;
do{
nr=0;
for(int i=0;i<m;i++) nr+=puteri[i]*(c[i]-'a');
cout<<c<<" "<<nr<<endl;
adauga(nr,k++);
}while(fgets(c,21,in)!=0);
cout<<endl;
}
int main()
{
citire();
rez();
FILE *out;
out=fopen("abc2.out","w");
fprintf(out,"%d",cnt);
return 0;
}