Pagini recente » Cod sursa (job #1045908) | Cod sursa (job #738781) | Cod sursa (job #2610057) | Cod sursa (job #639552) | Cod sursa (job #2589066)
#include<bits/stdc++.h>
using namespace std;
ifstream in("abc2.in");
ofstream out("abc2.out");
string text;
int word_length;
#define MOD 666013
vector<unsigned> hsh[MOD];
bool contains(unsigned value){
int list=value%MOD;
for(unsigned&a:hsh[list]){
if(a==value)
return true;
}
return false;
}
void add(unsigned to_add){
int list=to_add%MOD;
if(!contains(to_add))
hsh[list].push_back(to_add);
}
unsigned get_hash(const string&word){
unsigned result=0;
for(char a:word){
result=(result*3+(a-'a'));
}
return result;
}
void read(){
in>>text;
string word;
while(in>>word){
add(get_hash(word));
}
word_length=word.length();
}
void solve(){
unsigned base=pow(3,word_length-1);
int result=0;
unsigned current=get_hash(text.substr(0,word_length));
if(contains(current))
result++;
for(int i=word_length;i<text.length();i++){
current=(current-base*(text[i-word_length]-'a'))*3+(text[i]-'a');
if(contains(current))
result++;
}
out<<result;
}
int main(){
read();
solve();
return 0;
}