Submission #1315181

#TimeUsernameProblemLanguageResultExecution timeMemory
1315181algoproclubType Printer (IOI08_printer)C++20
0 / 100
46 ms35524 KiB
// UUID: c0020ad8-60cb-4eb2-83ba-cf9f77beedba
#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> trie(2.5e5+1, vector<int>(26, 0));
vector<bool> word_end(2.5e5+1, false);
vector<int> utso(2.5e5+1, 0);
vector<char>out;

int cmt = 1;

void add(string word, bool last){
	int x = 1;
	for(char c: word){
		int j = c - 'a';
		if(!trie[x][j]){
			cmt++;
			trie[x][j] = cmt;
		}
		if(last) utso[x] = j;
		x = trie[x][j];
	}
	word_end[x] = true;
}

void dfs(int csucs){
	if(word_end[csucs]) out.push_back('P');
	for(int i = 0; i < 26; i++){
		if(utso[csucs] == i || trie[csucs][i] == 0){
			continue;
		}
		out.push_back(char(i+'a'));
		dfs(trie[csucs][i]);
	}
	if(utso[csucs] != 0){
		out.push_back(char(utso[csucs]+'a'));
		dfs(trie[csucs][utso[csucs]]);
	}
	out.push_back('-');
}

int main() {
	int n;
	cin >> n;
	string mx_word;
	for(int i = 0; i < n; i++){
		string s;
		cin >> s;
		add(s, false);
		if(s.size() > mx_word.size()){
			mx_word = s;
		}
	}
	add(mx_word, true);
	dfs(1);
	cout << out.size()-mx_word.size()-1 << "\n";
	for(int i = 0; i < out.size()-mx_word.size()-1; i++){
		cout << out[i] << "\n";
	}
}
#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...