Submission #1319674

#TimeUsernameProblemLanguageResultExecution timeMemory
1319674algoproclubType Printer (IOI08_printer)C++20
100 / 100
133 ms127420 KiB
// UUID: 6be76404-ee2b-4178-931e-0c8362c1868c
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using pll=pair<ll, ll>;
const ll meret=5e5;

pair<ll, string> longest={0, ""};
vector<vector<ll>> trie(meret, vector<ll> (26));
vector<ll> cnt(meret);
ll nodes=0;

void insert(string s){
	ll curr=0;
	for (auto& c:s){
		if (trie[curr][c-'a']==0) trie[curr][c-'a']=++nodes;
		curr=trie[curr][c-'a'];
	}
	cnt[curr]++;
}

void dfs(ll curr){
	for (ll i=0; i<cnt[curr]; i++) cout << "P\n";
	for (ll i=0; i<26; i++){
		if (trie[curr][i]!=0){
			cout << char(i+'a') << '\n';
			dfs(trie[curr][i]);
		}
	}
	cout << "-\n";
}

void out(){
	ll curr=0;
	for (auto& c:longest.second){
		for (ll i=0; i<26; i++)
			if (i!=c-'a' && trie[curr][i]!=0){
				cout << char(i+'a') << '\n';
				dfs(trie[curr][i]);
			}
		cout << c << '\n';
		curr=trie[curr][c-'a'];
		for (ll i=0; i<cnt[curr]; i++) cout << "P\n";
	}
}

int main() {
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	ll n; cin >> n;
	for (ll i=0; i<n; i++){
		string s; cin >> s; insert(s);
		if (s.size()>longest.first){
			longest.first=s.size();
			longest.second=s;
		}
	}
	cout << nodes*2-longest.first+n << '\n';
	out();
}
#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...