Cod sursa(job #2247290)

Utilizator agrtAndreea G agrt Data 28 septembrie 2018 12:29:20
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb

#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";
	}

}