Submission #1259515

#TimeUsernameProblemLanguageResultExecution timeMemory
1259515mdobricType Printer (IOI08_printer)C++20
100 / 100
33 ms6848 KiB
#include <bits/stdc++.h>
using namespace std;

const int maxn = 25005;
int n;
string s[maxn];
int maxl, in, prekl[maxn];
vector <string> red;
vector <char> ispis;

int main (void){
	
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin >> n;
	for (int i = 0; i < n; i++){
		cin >> s[i];
	}
	sort(s, s + n);
	for (int i = 0; i < n; i++){
		if (s[i].size() > maxl){
			maxl = s[i].size();
			in = i;
		}
		if (i > 0){
			int br = 0;
			for (int j = 0; j < min(s[i].size(), s[i - 1].size()); j++){
				if (s[i][j] != s[i - 1][j]) break;
				br++;
			}
			prekl[i] = br;
		}
		//cout << s[i] << " " << prekl[i] << endl;
	}
	int l = in, r = in;
	red.push_back(s[in]);
	for (int i = max(prekl[in + 1], prekl[in]); i >= 1; i--){
		while (l > 0 and prekl[l] >= i){
			l--;
			red.push_back(s[l]);
		}
		while (r < n - 1 and prekl[r + 1] >= i){
			r++;
			red.push_back(s[r]);
		}
	}
	for (int i = 0; i < l; i++) red.push_back(s[i]);
	for (int i = r + 1; i < n; i++) red.push_back(s[i]);
	reverse(red.begin(), red.end());
	string prosli = "";
	for (int i = 0; i < n; i++){
		int pref = 0;
		for (int j = 0; j < min(prosli.size(), red[i].size()); j++){
			if (prosli[j] != red[i][j]) break;
			pref++;
		}
		for (int j = 0; j < int(prosli.size()) - pref; j++) ispis.push_back('-');
		for (int j = pref; j < red[i].size(); j++) ispis.push_back(red[i][j]);
		ispis.push_back('P');
		prosli = red[i];
	}
	cout << ispis.size() << "\n";
	for (int i = 0; i < ispis.size(); i++) cout << ispis[i] << "\n";
	
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...