Submission #1313308

#TimeUsernameProblemLanguageResultExecution timeMemory
1313308algoproclubType Printer (IOI08_printer)C++20
100 / 100
108 ms69132 KiB
// UUID: b08b650b-805d-4583-9783-7cdb77eced46
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> let;
string ans;
int op=0;
string lst;
void insert(string s){
	int pos=0;
	for(int i=0;i<s.size();i++){
		char c=s[i];
		if(!let[pos][c-'a']){
			let[pos][c-'a']=let.size();
			let.push_back(vector<int>(27));
		}
		pos=let[pos][c-'a'];
		if(i==s.size()-1) let[pos][26]=1;
	}
}

void dfs(int pos, int ind){
	if(let[pos][26]){
		op++;
		ans.push_back('P');
	}
	for(int i=0;i<26;i++){
		if (ind<lst.size()&&i != lst[ind] - 'a')
		if(let[pos][i]){
			op++;
			ans.push_back(i+'a');
			dfs(let[pos][i], ind+1);
			op++;
			ans.push_back('-');
		}
	}
	if(ind<lst.size()&&let[pos][lst[ind]-'a']){
		op++;
		ans.push_back(lst[ind]);
		dfs(let[pos][lst[ind]-'a'], ind+1);
		op++;
		ans.push_back('-');
	}
}

int main() {
	int n;
	cin>>n;
	let.resize(1, vector<int>(27));
	for(int i=0;i<n;i++){
		string s;
		cin>>s;
		if(s.size()>=lst.size()) lst=s;
		insert(s);
	}
	dfs(0, 0);
	while(ans.back()=='-'){
		ans.pop_back();
		op--;
	}
	cout<<op<<'\n';
	for(int i=0;i<op;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...