Pagini recente » Cod sursa (job #442500) | Cod sursa (job #1814051) | Cod sursa (job #1548299) | Cod sursa (job #2804370) | Cod sursa (job #1832397)
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#include <string.h>
#define MAXT 10000009
#define MAXC 30
#define MOD 200003
using namespace std;
char sir[MAXT];
vector<long long> v[MOD];
int cautare(int h){
int i, n, q;
q = h % MOD;
n = v[q].size();
for(i = 0;i < n; ++i)
if(v[q][i] == h)
return 1;
return 0;
}
int main(){
int len, a[25], h, l, total = 0, i;
char cuv[MAXC];
fstream f("abc2.in",ios::in);
fstream g("abc2.out",ios::out);
f.getline(sir,MAXT,'\n');
f.getline(cuv,MAXC,'\n');
len = strlen(cuv);
l = strlen(sir);
a[0] = 1;
for(i = 1;i <= len; ++i)
a[i] = 3 * a[i - 1];
h = 0;
for(i = 0;i < len; ++i)
h = h + a[i] * (cuv[i] - 'a');
if(cautare(h) == 0)
v[h % MOD].push_back(h);
while(f.getline(cuv,MAXC,'\n')){
h = 0;
for(i = 0;i < len; ++i)
h = h + a[i] * (cuv[i] - 'a');
if(cautare(h) == 0)
v[h % MOD].push_back(h);
}
h = 0;
for(i = 0;i < len; ++i)
h = h + a[i] * (sir[i] - 'a');
if(cautare(h) == 1)
++total;
for(i = len;i < l; ++i){
h = h / 3;
h = h + (sir[i] - 'a') * a[len - 1];
if(cautare(h) == 1)
++total;
}
g << total;
}