제출 #438004

#제출 시각아이디문제언어결과실행 시간메모리
438004dutchType Printer (IOI08_printer)C++17
100 / 100
113 ms48404 KiB
#include <bits/stdc++.h>
using namespace std;

const int LIM = 20 * 25000;

array<int, 26> g[LIM];
int a[LIM], b[LIM], w = 0, j = 0;
pair<int, string> mx = {0, ""};

void dfs(int u){
	while(a[u]--) cout << "P\n";
	if(u == w) exit(0);
	for(int i=0; i<26; ++i){
		if(!g[u][i] || g[u][i] == b[u]) continue;
		cout << char('a' + i) << '\n';
		dfs(g[u][i]);
		cout << "-\n";
	}
	if(!b[u]) return;
	cout << mx.second[j++] << '\n';
	dfs(b[u]);
	cout << "-\n";
}

signed main(){
	cin.tie(0)->sync_with_stdio(0);
	int n, e = 0; cin >> n;
	for(int i=0; i<n; ++i){
		string s; cin >> s;
		mx = max(mx, {s.size(), s});
		int u = 0;
		for(char c : s){
			if(!g[u][c-'a']) g[u][c-'a'] = ++e;
			u = g[u][c-'a'];
		}
		++a[u];
	}
	for(char c : mx.second)
		b[w] = g[w][c-'a'], w = b[w];
	cout << 2*e - mx.first + n << '\n';
	dfs(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...