Submission #676653

# Submission time Handle Problem Language Result Execution time Memory
676653 2022-12-31T15:32:24 Z QwertyPi Type Printer (IOI08_printer) C++14
90 / 100
1000 ms 101252 KB
#include <bits/stdc++.h>

using namespace std;

const int SIGMA = 26; 
struct node{
	node* nxt[SIGMA];
	bool word = false;
	int heavy = -1; 
	node() {
		for(int i = 0; i < SIGMA; i++){
			nxt[i] = nullptr;
		}
	}
	node* extend(int c){
		if(!nxt[c]) nxt[c] = new node();
		return nxt[c];
	}
	node* extend_heavy(int c){
		heavy = c;
		return nxt[c];
	}
};

string ans;
void dfs(node *root){
	if(root->word) ans.push_back('P');
	for(int c = 0; c < SIGMA; c++){
		if(root->nxt[c] && root->heavy != c){
			ans.push_back('a' + c);
			dfs(root->nxt[c]);
			ans.push_back('-');
		}
	}
	if(root->heavy != -1){
		ans.push_back('a' + root->heavy);
		dfs(root->nxt[root->heavy]);
		ans.push_back('-');
	}
}

node *root = new node();
int main(){
	int n; cin >> n;
	vector<string> vs;
	for(int i = 0; i < n; i++){
		string s; cin >> s;
		vs.push_back(s);
		node *x = root;
		for(auto c : s){
			x = x->extend(c - 'a');
		}
		x->word = true;
	}
	sort(vs.begin(), vs.end(), [](string a, string b){
		return a.size() < b.size();
	});
	{
		node *x = root;
		for(auto c : vs.back()){
			x = x->extend_heavy(c - 'a');
		}
	}
	dfs(root);
	while(ans.back() == '-') ans.pop_back();
	cout << ans.size() << endl;
	for(auto c : ans) cout << c << endl;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 296 KB Output is correct
2 Correct 1 ms 292 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 340 KB Output is correct
2 Correct 14 ms 1108 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 1748 KB Output is correct
2 Correct 28 ms 2228 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 66 ms 6068 KB Output is correct
2 Correct 149 ms 12792 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 168 ms 15180 KB Output is correct
2 Correct 55 ms 3824 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 433 ms 37732 KB Output is correct
2 Correct 975 ms 85164 KB Output is correct
3 Correct 526 ms 45036 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 372 ms 29764 KB Output is correct
2 Execution timed out 1089 ms 101252 KB Time limit exceeded
3 Halted 0 ms 0 KB -