Submission #1224769

#TimeUsernameProblemLanguageResultExecution timeMemory
1224769akmuhammet_sType Printer (IOI08_printer)C++20
100 / 100
118 ms49824 KiB
#include<bits/stdc++.h>
using namespace std;

int tree[650130][26],x=1,mx[650130];
bool B[650130];

int sz;
string s;
vector<char> ans;

void in(int nd,int id){
	if(id==s.size()){
		B[nd]=true;
		mx[nd]=max(mx[nd],sz);
		return;
	}
	if(!tree[nd][s[id]-'a']) tree[nd][s[id]-'a']=x++;
	in(tree[nd][s[id]-'a'],id+1);
	mx[nd]=max(mx[nd],sz);
}

void out(int nd){
	if(B[nd]){
		ans.push_back('P');
	}
	vector<pair<int,int> > p;
	for(int i=0; i<26; i++){
		if(tree[nd][i]){
			p.push_back({mx[tree[nd][i]],i});
		}
	}
	sort(p.begin(),p.end());
	for(int i=0; i<p.size(); i++){
		ans.push_back(char(p[i].second+97));
		out(tree[nd][p[i].second]);
		ans.push_back('-');
	}
}

int main(){
	int n;
	cin>>n;
	for(int i=0; i<n; i++){
		cin>>s;
		sz=s.size();
		in(0,0);
	}
	out(0);
	while(ans[ans.size()-1]=='-'){
		ans.pop_back();
	}
	cout<<ans.size()<<'\n';
	for(int i=0; i<ans.size(); i++){
		cout<<ans[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...