Pagini recente » Cod sursa (job #1608309) | Cod sursa (job #1646818) | Cod sursa (job #2637810) | Cod sursa (job #2787741) | Cod sursa (job #2787378)
#include <iostream>
#include <fstream>
#include <cstring>
#define nr_prim 27143
#define baza 37
using namespace std;
ifstream f("a.in");
ofstream g ("a.out");
int cnt;
int rasp[2000001];
char patt[2000001],text[2000001];
void cautare()
{
long long baza_la_puterea_m = 1;
int m = strlen(patt),n = strlen(text);
for(int i = 0;i<m;i++)
{
baza_la_puterea_m = (baza_la_puterea_m *baza)%nr_prim;
}
long long patt_hash = 0,text_hash= 0;
for(int i = 0;i<m;i++)
{
patt_hash = (patt_hash*baza + patt[i])%nr_prim;
text_hash = (text_hash*baza + text[i])%nr_prim;
}
for(int i =0;i<=n-m;i++)
{
if(patt_hash == text_hash)
{
bool adev = true;
for(int j = 0;j<m;j++)
if(patt[j]!= text[j+i])
{
adev = false;
break;
}
if(adev)
rasp[cnt++] = i;
}
if(i<n-m)
{
text_hash = (((text_hash-(1ll*text[i]*baza_la_puterea_m)%nr_prim + nr_prim)*baza)%nr_prim+text[i+m])%nr_prim;
}
}
}
int main()
{
f.getline(patt,2000000);
f.getline(text,2000000);
cautare();
cout << cnt;
}