Submission #1224711

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

struct tree{
	tree* ch[26];
	int cnt;
	int f;
	bool b;
};

tree* root;
vector<char> ans;

void in(string s){
	tree* nd=root;
	for(int i=0; i<s.size(); i++){
		if(nd->ch[s[i]-'a']==NULL){
			nd->ch[s[i]-'a']=new tree();
		}
		nd=nd->ch[s[i]-'a'];
		nd->cnt=max(nd->cnt,(int)(s.size()-i));
	}
	nd->f++;
}

void out(tree* nd){
	vector<pair<int,int> > p;
	for(int i=0; i<26; i++){
		if(nd->ch[i]!=NULL){
			p.push_back({nd->ch[i]->cnt,i});
		}
	}
	sort(p.begin(),p.end());
	for(int i=0; i<p.size(); i++){
		ans.push_back(char(p[i].second+97));
		out(nd->ch[p[i].second]);
		ans.push_back('-');
	}
	for(int i=0; i<nd->f; i++){
		ans.push_back('P');
	}
	nd->b=true;
}

int main(){
	root=new tree();
	int n;
	cin>>n;
	for(int i=0; i<n; i++){
		string s;
		cin>>s;
		in(s);
	}
	out(root);
	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...