Pagini recente » Cod sursa (job #1126704) | Borderou de evaluare (job #2003906) | Cod sursa (job #679382) | Cod sursa (job #1122191) | Cod sursa (job #413012)
Cod sursa(job #413012)
using namespace std;
#include <fstream>
#include <iostream>
#include <cstring>
#include <set>
#include <algorithm>
set<unsigned> S;
char s[10000005], c[25];
unsigned Val(char * s, int nC){
int NR=0;
for(int i=0;i<nC;++i)
NR=3*NR+s[i]-'a';
return NR;
}
int main(){
ifstream fin("abc2.in");
//int nS=0;
//while((ch=fin.get())>='a') s[nS++]=ch;
//s[nS]=0;
fin.getline(s,10000005);
fin.getline(c,25);
//cout<<s<<endl<<endl;
//cout.flush();
int nC=strlen(c);
S.insert(Val(c,nC) );
while(fin.getline(c,25))
S.insert(Val(c,nC));
ofstream fout("abc2.out");
int rez=0;
int NR=0;
unsigned P=1;
for(int i=0;i<nC;++i)
NR=3*NR+s[i]-'a',P*=3;
P/=3;
if(S.find(NR)!=S.end())
++rez;
for(int i=nC;s[i];++i){
NR%=P;
NR = 3*NR + s[i]-'a';
if(S.find(NR)!=S.end())
++rez;
}
fout<<rez<<endl;
return 0;
}