Pagini recente » Cod sursa (job #917008) | Cod sursa (job #1471485) | Cod sursa (job #2210967) | Cod sursa (job #1369590) | Cod sursa (job #798141)
Cod sursa(job #798141)
#include <fstream>
#include <vector>
#include <string>
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
#define LE 50600
#define MOD 666013
string sir;
string cuv[LE];
int num[LE];
vector<int> H[MOD];
void Push(int value)
{
int R=value%MOD;
H[R].push_back(value);
}
bool find(int value)
{
int R=value%MOD;
int N=H[R].size();
for(int I=0; I<N; ++I)
if (H[R][I]==value)
return true;
return false;
}
int K,n,i,j;
int Div;
int val;
int main()
{
f>>sir;
while (f>>cuv[++K]);
K--;
int m=cuv[1].length();
for(i=1; i<=K; ++i)
{
for(j=0; j<m; ++j)
{
num[i]=num[i]*3;
if(cuv[i][j]=='b')
num[i]++;
if (cuv[i][j]=='c')
num[i]+=2;
}
if (find(num[i])==false)
Push(num[i]);
}
int n=sir.length();
Div=1;
for(i=1; i<m; ++i)
Div*=3;
int sol=0;
for(i=0; i<m; ++i)
val=val*3+(sir[i]-'a');
if (find(val)==true)
++sol;
for(i=m; i<n; ++i)
{
val=(val-(sir[i-m]-'a')*Div)*3+(sir[i]-'a');
if (find(val)==true)
++sol;
}
g<<sol<<'\n';
f.close();
g.close();
return 0;
}