Pagini recente » Cod sursa (job #1618665) | Cod sursa (job #2285282) | Cod sursa (job #2902091) | Cod sursa (job #287741) | Cod sursa (job #2283064)
//
// main.cpp
// potrivirea_sirurilor
//
// Created by Tereza Oprea on 07/11/2018.
// Copyright © 2018 Tereza Oprea. All rights reserved.
//
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
char pattern[2000010], text[2000010];
int d[2000010], i, j;
unsigned long n1, n2;
int ans, v[20000010], lun;
ifstream fin ("strmatch.in");
ofstream fout ("strmatch.out");
int main() {
fin.getline(pattern, 2000010);
fin.getline(text, 2000010);
i = 0; j = 1;
n1 = strlen (pattern);
n2 = strlen (text);
while (j<n1){
if ( pattern[i] == pattern[j]){
i++;
d[j] = i;
j++;
continue;
}
if ( i == 0 ){
d[i] = 0;
j++;
continue;
}
i = d[i-1];
}
i = 0; j = 0;
while (j < n2){
if (pattern[i] == text[j]){
i++;
j++;
}
if ( i == n1){
ans++;
v[ans] = j - n1;
i = d[n1-1];
}
else if (i < n1 && pattern[i]!=text[j]){
if (i!=0)
i = d[i-1];
else
j++;
}
}
fout << ans << '\n';
for (i = 1; i<=min (ans, 1000); i++)
fout << v[i] << ' ';
return 0;
}