Submission #1254466

#TimeUsernameProblemLanguageResultExecution timeMemory
1254466LM1Type Printer (IOI08_printer)C++20
10 / 100
46 ms35016 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define ff first
#define ss second
#define pb push_back
#define vi vector<int>
#define fr(i,ii,iii) for(int i=ii;i<iii;i++)
const int N=25003,M=26;
int n;
int trie[N*20][M],ct,nd;
bool f[N*20],ok;
char c[N*20];
vi v[N*20];
vector<char>ans;
void ins(string a){
	int st=0;
	fr(i,0,a.size()){
		int &x=trie[st][a[i]-'a'];
		if(x==0){
			x=++ct;
			v[st].pb(x);
		}
		st=x;
		c[st]=a[i];
	}
	if(ok)nd=st;
	f[st]=1;
}
void dfs(int st){
	if(nd==st)ok=1;
	for(auto i:v[st]){
		ans.pb(c[i]);
		if(f[i])ans.pb('P');
		dfs(i);
	}
	if(!ok)ans.pb('-');
}
bool srt(string a,string b){
	return(a.size()<b.size());
}
int main(){
	ios_base::sync_with_stdio(NULL);cin.tie(NULL);
	cin>>n;
	string aa[n];
	fr(i,0,n){
		cin>>aa[i];
	}
	sort(aa,aa+n,srt);
	fr(i,0,n){
		ok=(i==n-1);
		ins(aa[i]);
	}
	ok=0;
	dfs(0);
	cout<<ans.size()<<"\n";
	for(auto i:ans)cout<<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...