Submission #620060

#TimeUsernameProblemLanguageResultExecution timeMemory
6200601neType Printer (IOI08_printer)C++14
10 / 100
298 ms32408 KiB
#include<bits/stdc++.h>
using namespace std;
string mx;
bool compare(string &a,string &b){
	for(int i = 0 ;i < (int)a.size() && i < (int)b.size();i++){
		if(a[i] == b[i]) continue;
		return (a[i] < b[i]);
	}
	return (int)a.size() < (int)b.size();
}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	int n;cin>>n;
	vector<string>arr(n);
	for (int i = 0;i<n;++i){cin>>arr[i];if (arr[i].length() > mx.length())mx = arr[i];}
	map<string,set<int>>brr;
	sort(arr.begin(),arr.end(),compare);
	for (int i = 0;i<n;++i){
		string s;
		for (auto x:arr[i]){
			s+=x;
			brr[s].insert(i);
		}
	}
	vector<char>ans;
	vector<int>taken(n,false);
	for (int i = 0;i<n;++i){
		if (!taken[i]){
			string cur;
			for (int j = 0;j<(int)arr[i].length();++j){
				ans.push_back(arr[i][j]);
				cur+=arr[i][j];
			}
			ans.push_back('P');
			taken[i] = true;
			while(!cur.empty()){
				while(!brr[cur].empty() && taken[*brr[cur].begin()]){
					brr[cur].erase(*brr[cur].begin());
				}
				if (!brr[cur].empty()){
					int x = *brr[cur].begin();
					//cout<<cur<<" "<<x<<'\n';
					taken[x] = true;
					while(cur.length() < arr[x].length()){
						ans.push_back(arr[x][cur.length()]);
						cur+=ans.back();
					}
					ans.push_back('P');
					continue;
				}
				ans.push_back('-');
				cur.pop_back();
			}
		}
	}
	while(!ans.empty() && ans.back() =='-')ans.pop_back();
	cout<<ans.size()<<'\n';
	for (auto x:ans)cout<<x<<'\n';
	return 0;
}
#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...