Pagini recente » Cod sursa (job #2121851) | Cod sursa (job #254101) | Cod sursa (job #871320) | Cod sursa (job #2493433) | Cod sursa (job #1747871)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <set>
#include <queue> // std::priority_queue
#include <vector> // std::vector
#include <functional> // std::greater
using namespace std;
//16:33
int main() {
int n, m;
const int mod = 997;
int c = 67;
string s1, s2;
ifstream myfile;
myfile.open ("strmatch.in");
myfile>>s1>>s2;
n = s1.size();
m = s2.size();
vector <int> p(n);
vector <int> rez;
myfile.close();
if (n && n < m) {
int h1, h2, k = 0;
h1 = h2 = 0;
p[0] = 1;
for (int i = 1; i < n; i++)
p[i] = c * p[i-1];
for (int i = 0; i < n; i++) {
h1 += s1[i]*p[n-1-i];
h2 += s2[i]*p[n-1-i];
}
if (h1 == h2 && s2.compare(0, n, s1) == 0) {
rez.push_back(0);
}
for (int i = n; i < m; i++) {
h2 -= p[n-1]*s2[i-n];
h2 = h2 * c + s2[i];
//cout<<i<<" "<<h1<<" "<<h2<<endl;
if (h1 == h2 && s2.compare(i-n+1, n, s1) == 0) {
rez.push_back(i-n+1);
//if (rez.size() == 1000)
//break;
}
}
}
ofstream f2;
f2.open ("strmatch.out");
n = rez.size();
f2<<n<<endl;
n = max(n, 1000);
for (int i = 0; i < n; i++) {
f2<<rez[i]<<" ";
}
f2<<endl;
f2.close();
return 0;
}