Submission #1356396

#TimeUsernameProblemLanguageResultExecution timeMemory
1356396CutSandstoneType Printer (IOI08_printer)C++20
100 / 100
51 ms48872 KiB
#include <bits/stdc++.h>
using namespace std;
#define a first
#define b second
const int mod = 1e9 + 7;
const int inv2 = (mod + 1) / 2;
using ll = long long;
const int N = 5e5;
int trie[N][26];
bool w[N];
int dep[N];
int ptr = 1;
void dfs(int s, bool back) {
	if (w[s]) cout << "P\n";
	if (back) {
		for (int i = 0; i < 26; i++)
			if (trie[s][i] != -1) {
				cout << (char)(i + 'a') << "\n";
				dfs(trie[s][i], 1);
				cout << "-\n";
			}
		return;
	}
	int md = -1;
	for (int i = 0; i < 26; i++)
		if (trie[s][i] != -1 &&
			(md == -1 || dep[trie[s][i]] > dep[trie[s][md]]))
			md = i;
	if (md == -1) return;
	for (int i = 0; i < 26; i++)
		if (trie[s][i] != -1 && i != md) {
			cout << (char)(i + 'a') << "\n";
			dfs(trie[s][i], 1);
			cout << "-\n";
		}
	cout << (char)(md + 'a') << "\n";
	dfs(trie[s][md], 0);
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n;
	cin >> n;
	fill(trie[0], trie[0] + 26, -1);
	for (int x = 0; x < n; x++) {
		string s;
		cin >> s;
		int p = 0;
		for (int i = 0; i < s.size(); i++) {
			int d = s[i] - 'a';
			if (trie[p][d] == -1) {
				fill(trie[ptr], trie[ptr] + 26, -1);
				trie[p][d] = ptr++;
			}
			dep[p] = max(dep[p], (int)s.size() - i);
			p = trie[p][d];
		}
		w[p] = 1;
	}
	cout << ptr * 2 - 2 - dep[0] + n << "\n";
	dfs(0, 0);
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...