Pagini recente » Cod sursa (job #739620) | Cod sursa (job #1750714) | Cod sursa (job #1134231) | Cod sursa (job #1850531) | Cod sursa (job #663072)
Cod sursa(job #663072)
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string s, w;
vector <int> sol;
ifstream in("strmatch.in");
in >> w >> s;
in.close();
int back = 0, pos = 2, w_size = w.size(), s_size = s.size(), pattern[2000];
pattern[0] = -1;
pattern[1] = 0;
while (pos < w.size())
{
if(w[pos-1] == w[back])
{
++back;
pattern[pos] = back;
++pos;
}
else
if(back > 0)
back = pattern[back];
else
{
pattern[pos] = 0;
++pos;
}
}
for (int i = 0; i < 3; ++i)
cout << pattern[i] << " ";
int now = 0, i = 0;
while (now + i < s_size)
{
if(w[i] == s[now+i])
{
if(i == w_size - 1)
{
sol.push_back(now);
now = now + i - pattern[i];
i = pattern[i];
}
else
++i;
}
else
{
now = now + i - pattern[i];
if(pattern[i] > -1)
i = pattern[i];
else
i = 0;
}
}
ofstream out("strmatch.out");
out << sol.size() << "\n";
int f = min(1000, int(sol.size()));
for (int q = 0; q < f; ++q)
out << sol[q];
out.close();
return 0;
}