Pagini recente » Cod sursa (job #1033740) | Istoria paginii runda/simulare_preoli | Monitorul de evaluare | Cod sursa (job #129544) | Cod sursa (job #2247290)
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int get_pref(string x) {
vector<int> ll;
ll.resize(x.size());
ll[0] = 0;
unsigned int i = 1, j = 0;
int fnd = 0;
int lw = 0;
int bg = -1;
int lngst = 0;
int entlen = 0;
while (i < x.size()) {
if (x[i] == x[j]) {
fnd = 1;
entlen++;
if (bg < 0)
bg = i;
if ((i+1) == 2 * bg)
lw = bg;
ll[i] = j + 1;
i++;
j++;
} else {
if (!fnd)
i++;
else {
fnd = 0;
if (lw) {
if (entlen % lw)
entlen = (entlen / lw) * lw + lw;
else
entlen += lw;
if (entlen > lngst)
lngst = entlen;
}
entlen = 0;
lw = 0;
bg = -1;
j = 0;
}
}
}
if (lw) {
if (entlen % lw)
entlen = (entlen / lw) * lw + lw;
else
entlen += lw;
if (entlen > lngst)
lngst = entlen;
}
return lngst;
}
int main(int argc, char** argv) {
ifstream x;
ofstream y;
int num;
string str;
x.open("prefix.in");
y.open("prefix.out");
x >> num;
for (int i = 0; i < num; i++) {
x >> str;
y << get_pref(str) << "\n";
}
}