Pagini recente » Cod sursa (job #1391821) | Cod sursa (job #1591864) | Cod sursa (job #125366) | Cod sursa (job #332633) | Cod sursa (job #2474461)
#include <bits/stdc++.h>
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
const int dim1 = 7001, dim2 = 10000002, dim3 = 22;
int main()
{
vector <long long> v0[dim1];
long long nrgas, nr = 0;
long long p3[dim3];
char v[dim2], cuv[dim3];
int i, j, l, rest;
p3[0] = 1;
for(i = 1; i < dim3; ++i)
p3[i] = p3[i - 1] * 3;
f >> v;
f >> cuv;
l = strlen(cuv);
do{
nr = 0;
for(i = 0; cuv[i]; ++i){
nr += p3[i] * (cuv[i] - 'a');
}
rest = nr % dim1;
for(i = 0; i < v0[rest].size(); ++i){
if(v0[rest].at(i) == nr){
break;
}
}
if(i == v0[rest].size())
v0[rest].push_back(nr);
}while(f >> cuv);
nr = 0;
for(i = 0; i < l; ++i){
nr += p3[i] * (v[i] - 'a');
}
for(j = l; v[j]; ++j){
rest = nr % dim1;
for(i = 0; i < v0[rest].size(); ++i){
if(v0[rest].at(i) == nr){
++nrgas;
break;
}
}
nr /= 3;
nr += p3[l - 1] * (v[j] - 'a');
}
rest = nr % dim1;
for(i = 0; i < v0[rest].size(); ++i){
if(v0[rest].at(i) == nr){
++nrgas;
break;
}
}
g << nrgas;
return 0;
}