Pagini recente » Cod sursa (job #383107) | Cod sursa (job #2454256) | Cod sursa (job #1458553) | Cod sursa (job #1135291) | Cod sursa (job #1846410)
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define s second
#define pii pair<int, int>
#define mp make_pair
using namespace std;
const string name = "abc2",
in_file = name + ".in",
out_file = name + ".out";
ifstream fin(in_file);
ofstream fout(out_file);
string str;
unordered_map<unsigned, bool> hash_table;
unsigned length_word;
unsigned power3[21];
unsigned add_letter(unsigned nr, unsigned digit) {
unsigned temp = nr / power3[length_word - 1];
nr -= temp * power3[length_word - 1];
nr *= 3;
nr += digit;
return nr;
}
void process_word(string& word) {
unsigned current_number = 0;
for (unsigned i = 0; i < length_word; i++) {
current_number = add_letter(current_number, word[i] - 'a');
}
hash_table[current_number] = true;
}
int main() {
fin >> str;
power3[0] = 1;
for (unsigned i = 1; i <= 20; i++) {
power3[i] = 3 * power3[i - 1];
}
string word;
while (fin >> word) {
if (!length_word) {
length_word = word.size();
if (length_word > str.size()) {
fout << 0;
return 0;
}
}
process_word(word);
}
int sol = 0;
unsigned current_number = 0;
for (unsigned i = 0; i < str.size(); i++) {
current_number = add_letter(current_number, str[i] - 'a');
if (i + 1 >= length_word) {
if (hash_table.count(current_number)) {
sol++;
}
}
}
fout << sol;
return 0;
}