Pagini recente » Cod sursa (job #2642) | Cod sursa (job #2449989) | Cod sursa (job #1144753) | Cod sursa (job #1844518) | Cod sursa (job #343885)
Cod sursa(job #343885)
#include <stdio.h>
#include <string.h>
#include <vector>
#define MAXN 100000002
#define CLEN 22
#define MOD 666013
using namespace std;
vector<int> h[MOD];
char text[MAXN];
void hash(int key)
{
int k = key % MOD;
h[k].push_back(key);
}
bool find(int key)
{
int i;
int k = key % MOD;
for (i=0;i<h[k].size();i++)
{
if (h[k][i] == key)
{
return true;
}
}
return false;
}
int main()
{
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
char cv[CLEN];
int len,i,j,sz,pw,key = 0,nrsol = 0;
fgets(text,MAXN,stdin);
len = strlen(text)-1;
fgets(cv,CLEN,stdin);
sz = strlen(cv)-1;
pw = 1;
for (i=0;i<sz;i++)
{
key += (cv[i]-'a')*pw;
pw*=3;
}
hash(key);
while (!feof(stdin))
{
key = 0;
pw = 1;
fgets(cv,CLEN,stdin);
for (i=0;i<sz;i++)
{
key+= (cv[i] - 'a')*pw;
pw*=3;
}
hash(key);
}
for (i=0;i<len-sz;i++)
{
key = 0;
pw = 1;
for (j=0;j<sz;j++)
{
key+= (text[i+j] - 'a')*pw;
pw*=3;
}
if (find(key))
{
nrsol++;
}
}
printf("%d",nrsol);
return 0;
}