Pagini recente » Borderou de evaluare (job #1579373) | Monitorul de evaluare | Cod sursa (job #634432) | Cod sursa (job #702807) | Cod sursa (job #1775554)
#include <fstream>
#include <string>
#include <vector>
#define MOD 666013
using namespace std;
ifstream fin ("abc2.in");
ofstream fout ("abc2.out");
vector < unsigned int > H[3 + MOD];
string S, W;
int Search(int value)
{
int line = value % MOD;
for (int i = 0; i < H[line].size(); ++ i)
if (H[line][i] == value)
{
return 1;
}
return 0;
}
int main ()
{
fin >> S;
int N, M, sol = 0;
unsigned int nr, pows[25];
pows[0] = 1;
for (int i = 1; i < 20; ++ i) pows[i] = 3 * pows[i-1];
while (fin >> W)
{
N = W.size(); nr = 0;
for (int i = 0; i < N; ++ i) nr += pows[i] * (W[i] - 'a');
if (!Search (nr))
{
H[nr % MOD].push_back (nr);
}
}
nr = 0;
M = S.size();
for (int i = 0; i < N; ++ i) nr += pows[i] * (S[i] - 'a');
sol += Search (nr);
-- N;
for (int i = N ; i < M; ++ i)
{
nr /= 3;
nr += pows[N] * (S[i] - 'a');
sol += Search (nr);
}
fout << sol << '\n';
fout.close();
return 0;
}