Pagini recente » Cod sursa (job #2161844) | Cod sursa (job #2685868) | Cod sursa (job #1497391) | Cod sursa (job #1391814) | Cod sursa (job #2295989)
#include<fstream>
#include<cstring>
#include<vector>
#include<cstdlib>
using namespace std;
FILE *f = freopen("abc2.in", "r", stdin);
FILE *g = freopen("abc2.out", "w", stdout);
const long PRIM = 29599;
char text_mare[10000001], text_mic[21];
vector<long> Hash[PRIM];
inline 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()
{
scanf("%s", text_mare);
long lung1 = strlen(text_mare);
long lung2;
while(scanf("%s", text_mic) != EOF){
lung2 = strlen(text_mic);
long val = 0;
for(long i = 0 ; i < lung2 ; i++){
val = val * 3 + ((long)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 + ((long)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 -= ((long)text_mare[i - lung2] - 'a') * putere;
val = val * 3 + ((long)text_mare[i] - 'a');
sol += gaseste_valoarea(val);
}
printf("%d", sol);
return 0;
}