Pagini recente » Cod sursa (job #1176424) | Cod sursa (job #19395) | Cod sursa (job #1411921) | Cod sursa (job #3146632) | Cod sursa (job #2295950)
#include<fstream>
#include<cstring>
#include<vector>
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
const long PRIM = 191507;
char text_mare[10000001], text_mic[21];
vector<long> Hash[PRIM];
long gaseste_valoarea(long x){
long x_row = x % PRIM;
for(long i = 0 ; i < Hash[x_row].size() ; i++){
if(Hash[x_row][i] == x)
return 1;
}
return 0;
}
int main()
{
f>>text_mare;
long lung1 = strlen(text_mare);
long lung2;
while(f>>text_mic){
lung2 = strlen(text_mic);
long val = 0;
for(long i = 0 ; i < lung2 ; i++){
val = val * 3 + (text_mic[i] - 'a');
}
Hash[val % PRIM].push_back(val);
}
long sol = 0;
long val = 0;
long putere = 1;
for(long i = 0 ; i < lung2 ; i++){
val = val * 3 + (text_mare[i] - 'a');
}
for(long i = 0 ; i < lung2 - 1 ; i++)
putere *= 3;
sol += gaseste_valoarea(val);
for(long i = lung2 ; i < lung1 ; i++){
val -= (text_mare[i - lung2] - 'a') * putere;
val = val * 3 + (text_mare[i] - 'a');
sol += gaseste_valoarea(val);
}
g<<sol;
return 0;
}