Submission #782272

# Submission time Handle Problem Language Result Execution time Memory
782272 2023-07-13T17:32:52 Z JustAmethyst Type Printer (IOI08_printer) C++17
100 / 100
41 ms 5040 KB
#include <bits/stdc++.h>
#define ll long long
#define sz(x) (int)(x.size())
using namespace std;

int commonPrefix(string& x, string& y) {
	for (int i = 0; i < min(sz(x), sz(y)); ++i){
		if (x[i] != y[i]) return i;
	}
	return min(sz(x), sz(y));
}

void solve() {
	vector<char> ans;
	int n, ml = 0, lcp;
	cin >> n;
	int l = 0, r = n-1;
	string s[n], ms, last = "";
	for (int i = 0; i < n; ++i) {
		cin >> s[i];
		if (sz(s[i]) > ml) {
			ms = s[i];
			ml = sz(s[i]);
		}
	}
	sort(s, s+n);
	for (int i = 0; i <= ml; ++i) {
		while (commonPrefix(s[l], ms) == i) {
			lcp = commonPrefix(last, s[l]);
			for (int j = 0; j < (sz(last)-lcp); ++j) {
				// cout << "-\n";
				ans.push_back('-');
			}
			for (int j = lcp; j < sz(s[l]); ++j) {
				// cout << s[l][j] << "\n";
				ans.push_back(s[l][j]);
			}
			// cout << "P\n";
			ans.push_back('P');
			last = s[l];
			++l;
		}

		while (commonPrefix(s[r], ms) == i) {
			lcp = commonPrefix(last, s[r]);
			for (int j = 0; j < (sz(last)-lcp); ++j) {
				// cout << "-\n";
				ans.push_back('-');
			}
			for (int j = lcp; j < sz(s[r]); ++j) {
				// cout << s[r][j] << "\n";
				ans.push_back(s[r][j]);
			}
			// cout << "P\n";
			ans.push_back('P');
			last = s[r];
			--r;
		}
	}

	cout << (sz(ans)-1) << "\n";
	for (int i = 0; i < (sz(ans)-1); ++i) {
		cout << ans[i] << "\n";
	}

	return;
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	solve();
	
	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 320 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 596 KB Output is correct
2 Correct 9 ms 980 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 12 ms 1196 KB Output is correct
2 Correct 6 ms 956 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 19 ms 2160 KB Output is correct
2 Correct 37 ms 4328 KB Output is correct
3 Correct 23 ms 3280 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 18 ms 2012 KB Output is correct
2 Correct 41 ms 5040 KB Output is correct
3 Correct 25 ms 3704 KB Output is correct
4 Correct 38 ms 4884 KB Output is correct