Pagini recente » Cod sursa (job #591190) | Cod sursa (job #387495) | Cod sursa (job #3144413) | Cod sursa (job #27290) | Cod sursa (job #1168471)
#include <iostream>
#include <fstream>
#include <set>
int main()
{
std::ifstream in("abc2.in");
std::ofstream out("abc2.out");
std::set<long long> codes;
int codesize = -1;
// Read in data.
std::string text;
std::getline(in, text);
while (!in.eof()) {
std::string line;
std::getline(in, line);
if (line.size()) {
if (codesize == -1) {
codesize = line.size();
}
long long code = 0;
for (int i = 0; i < line.size(); ++i) {
code = code * 3 + (line[i] - 'a');
}
codes.insert(code);
}
}
// Compute max code = 3^{codesize}
long long maxcode = 1;
for (int i = 0; i < codesize; ++i) {
maxcode = maxcode * 3;
}
int sol = 0;
// Do the rest.
long long code = 0;
for (int i = 0; i < text.size(); ++i) {
code = (code * 3 + text[i] - 'a') % maxcode;
if (i >= codesize - 1 && codes.count(code)) {
sol++;
}
}
out << sol << std::endl;
return 0;
}