Pagini recente » Cod sursa (job #238536) | Cod sursa (job #2198168) | Cod sursa (job #1049242) | Istoria paginii runda/hoata9/clasament | Cod sursa (job #595224)
Cod sursa(job #595224)
# include <cstdio>
# include <cstring>
# include <ext/hash_set>
using namespace std;
using namespace __gnu_cxx;
const char *FIN = "abc2.in", *FOU = "abc2.out";
const int MAX = 10000005;
char text[MAX], cuv[25];
hash_set < unsigned, hash <short> > H;
int N, L, solution;
inline unsigned codif (char *X) {
unsigned sol = 0;
for (int i = 0; i <= L; ++i)
sol = sol * 3 + X[i] - 'a';
return sol;
}
int main (void) {
freopen (FIN, "r", stdin);
fgets (text, MAX, stdin);
fgets (cuv, 25, stdin);
N = strlen (text) - 2, L = strlen (cuv) - 2;
for (H.insert (codif (cuv)); fgets (cuv, 25, stdin); H.insert (codif (cuv))) ;
unsigned HASH = 0, piece = 1;
for (int i = 0; i < L; ++i) {
HASH = HASH * 3 + text[i] - 'a';
piece *= 3;
}
for (int i = L; i <= N; ++i) {
HASH = (HASH % piece) * 3 + text[i] - 'a';
solution += H.count (HASH) ;
}
fprintf (fopen (FOU, "w"), "%d", solution) ;
}