Pagini recente » Cod sursa (job #1369154) | Cod sursa (job #141548) | Cod sursa (job #2852124) | Cod sursa (job #1867805) | Cod sursa (job #1434418)
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
typedef int64_t var;
#define P 209141
char pattern[3000000], Text[3000000];
vector<var> Sol;
int main() {
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
cin>>pattern;
cin>>Text;
var patternH = 0, l = 0, power = 1;
for(var i=0; pattern[i]; i++) {
l++;
patternH = patternH * P + pattern[i];
}
var has = 0;
var i;
for(i=0; i<l-1; i++) {
power *= P;
has = has * P + Text[i];
}
for(;Text[i]; i++) {
has = has * P + Text[i];
if(has == patternH)
Sol.push_back(i-l+1);
has = has - power * Text[i-l+1];
}
cout<<Sol.size()<<'\n';
var stop = Sol.size();
if(stop > 1000) stop = 1000;
for(var i=0; i<stop; i++)
cout<<Sol[i]<<" ";
}