Pagini recente » Cod sursa (job #659379) | Cod sursa (job #3235679) | Cod sursa (job #2327627) | Cod sursa (job #3259881) | Cod sursa (job #1377022)
#include <iostream>
#include <stdio.h>
using namespace std;
const int N=10000003,M=50001;
const int P=6666269;
int val[M],urm[M],lst[P+1];
char s[N],c[21];
int m,poz,cnt;
bool caut(int nr){
int r=nr%P;
int p=lst[r];
while(p!=0){
if(val[p]==nr) return 1;
p=urm[p];
}
return 0;
}
unsigned long long puteri[20];
void adauga (int nr){
if(caut(nr)==0){
int r=nr%P;
val[++poz]=nr;
urm[poz]=lst[r];
lst[r]=poz;
}
}
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]);
cnt+=caut(masca);
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]);
cnt+=caut(masca);
}
}
void citire(){
FILE *in;
in=fopen("abc2.in","r");
fgets(s,N,in);
int 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');
adauga(nr);
}while(fgets(c,21,in));
}
int main()
{
citire();
rez();
FILE *out;
out=fopen("abc2.out","w");
fprintf(out,"%d",cnt);
return 0;
}