Pagini recente » Cod sursa (job #896821) | Cod sursa (job #3281066) | Cod sursa (job #2922678) | Cod sursa (job #984970) | Cod sursa (job #2388788)
#include <algorithm>
#include <fstream>
#include <cstring>
#include <vector>
#define LMAX 10010000
#define MOD 66013
#define LCUV 23
using namespace std;
ifstream in("abc2.in");
ofstream out("abc2.out");
char cuv[LCUV], s1[LMAX];
unsigned int ok, nr;
unsigned int numar, nr_poz;
unsigned int p = 1;
vector <unsigned int> v[MOD + 5];
vector <unsigned int> :: iterator it;
int main()
{
in.getline(s1,LMAX);
in.getline(cuv,LCUV);
int l1=strlen(s1);
int l=strlen(cuv);
do {
nr = 0;
p = 1;
ok = 0;
for(int i = 0; i < l; i++) {
nr += p * (cuv[i] - 'a');
p *= 3;
}
for (it = v[nr % MOD].begin();it!=v[nr%MOD].end();it++)
if (*it==nr)ok=1;
if (ok==0)
v[nr%MOD].push_back(nr);
}
while (in.getline(cuv,LCUV));
p = 1;
for(int i = 0; i < l; i++) {
numar += (s1[i]-'a') * p;
p *= 3;
}
p /= 3;
for(int i = l; i <= l1; i++) {
for(it = v[numar % MOD].begin(); it != v[numar % MOD].end(); it++)
if(*it == numar) {
nr_poz++;
break;
}
if (i < l1)
numar = numar / 3 + p * (s1[i] - 'a');
}
out << nr_poz << '\n';
in.close();
out.close();
}