Pagini recente » Cod sursa (job #1961961) | Cod sursa (job #3249421) | Cod sursa (job #950737) | Cod sursa (job #536721) | Cod sursa (job #1831887)
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#include <string.h>
#define MAXT 10000009
#define MAXC 25
#define MOD 200003
using namespace std;
char sir[MAXT];
vector<int> v[MOD];
int hashFunc(char cuv[MAXC]){
int a = 7, i, len;
int h = 0;
len = strlen(cuv);
for(i = 1;i < len; ++i){
h = h + cuv[i] * a;
a = a * a;
}
return h;
}
int main(){
char cuv[MAXC],aux[MAXC];
fstream f("abc2.in",ios::in);
fstream g("abc2.out",ios::out);
f.getline(sir,MAXT,'\n');
int i, len, total = 0, l, m, y, x, j;
f.getline(cuv,MAXC,'\n');
l = strlen(cuv);
/*while(!f.eof()){
f.getline(cuv,MAXC,'\n');
x = hashFunc(cuv);
v[x % MOD].push_back(x);
}
*/
len = strlen(sir);
for(i = 0;i <= len - l; ++i){
strcpy(aux,"");
strncpy(aux,sir + i,l);
aux[l] = '\0';
x = hashFunc(aux);
v[x % MOD].push_back(x);
}
x = hashFunc(cuv);
m = v[x % MOD].size();
y = x % MOD;
for(i = 0;i < m; ++i)
if(v[y][i] == x){
++total;
i = m + 10;
}
while(!f.eof()){
f.getline(cuv,MAXC,'\n');
x = hashFunc(cuv);
m = v[x % MOD].size();
y = x % MOD;
for(i = 0;i < m; ++i)
if(v[y][i] == x){
++total;
v[y][i] = -1;
i = m + 10;
}
}
g << total;
}