제출 #1315184

#제출 시각아이디문제언어결과실행 시간메모리
1315184algoproclubType Printer (IOI08_printer)C++20
80 / 100
45 ms35812 KiB
// UUID: 6b28326b-85e8-4fe9-8796-61663562b6df
#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, -1);
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] != -1){
		out.push_back(char(utso[csucs]+'a'));
		dfs(trie[csucs][utso[csucs]]);
	}
	out.push_back('-');
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	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...