Pagini recente » Cod sursa (job #1969833) | Cod sursa (job #3128955) | Cod sursa (job #2581509)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <set>
using namespace std;
ifstream fin("abc2.in");
ofstream fout("abc2.out");
const int L = 10000000;
const int l = 20;
set <long long> dictionar;
char text[L];
char cuv[l];
int characterValue(char c){
return c - 'a';
}
int main()
{
int ans,i,lengthT, length;
long long nr,p;
fin >> text;
lengthT = (int)strlen(text);
while(fin >> cuv){
nr = 0;
length = (int)strlen(cuv);
for(i=0; i<length; i++)
nr = nr * 3 + 1LL * characterValue(cuv[i]);
dictionar.insert(nr);
}
if(lengthT < length){
fout << "0\n";
return 0;
}
nr = 0, ans = 0;
p = 1;
for(i=0; i<length; i++){
nr = nr * 3 + 1LL * characterValue(text[i]);
p *= 3;
}
if(dictionar.find(nr) != dictionar.end())
ans++;
p /= 3;
for(; i<lengthT; i++){
nr = (nr - p * characterValue(text[i-length])) * 3 + 1LL * characterValue(text[i]);
if(dictionar.find(nr) != dictionar.end())
ans++;
}
fout << ans << "\n";
return 0;
}