Pagini recente » Cod sursa (job #1130234) | Cod sursa (job #2478981) | Cod sursa (job #971465) | Cod sursa (job #2292307) | Cod sursa (job #1786247)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream fin("abc2.in");
ofstream fout("abc2.out");
const long long prim = 2000003;
int l, sol;
char a[10000005];
char c[25];
vector<long long> v[prim + 5];
long long convert(char s[25], int l) {
long long sc = 0;
int b = 1;
for (int i = l - 1; i >= 0; --i) {
if (s[i] == 'a') {
sc += 1 * b;
}
else if (s[i] == 'b') {
sc += 2 * b;
}
else {
sc += 3 * b;
}
b *= 4;
}
return sc;
}
int main() {
fin >> a;
char s[25];
while (fin >> s) {
l = strlen(s);
long long rez = convert(s, l);
int r = rez % prim;
int var = 0;
for (int i = 0; i < v[r].size(); ++i) {
if (v[r][i] == rez) {
var = 1;
i = v[r].size() + 10;
}
}
if (var == 0) {
v[r].push_back(rez);
}
}
int n = strlen(a);
for (int i = 0; i < l - 1; ++i) {
c[i + 1] = a[i];
}
for (int i = l - 1; i < n; ++i) {
for (int j = 1; j < l; ++j) {
c[j - 1] = c[j];
}
c[l - 1] = a[i];
long long rez = convert(c, l);
int r = rez % prim;
int var = 0;
for (int i = 0; i < v[r].size(); ++i) {
if (v[r][i] == rez) {
var = 1;
}
}
if (var == 1) {
sol++;
}
}
fout << sol;
return 0;
fout.close();
}