제출 #1196634

#제출 시각아이디문제언어결과실행 시간메모리
1196634nikolashamiType Printer (IOI08_printer)C++20
30 / 100
89 ms81340 KiB
#include<bits/stdc++.h>
using namespace std;
using ll=long long;

#define pb push_back

const ll N=5e5+1;
ll ch[N][26],term[N],nd=1;
vector<char>ans;

void ins(string s){
	ll u=1;
	for(char&c:s){
		ll x=c-'a';
		if(!ch[u][x])ch[u][x]=++nd;
		u=ch[u][x];
	}
	term[u]=1;
}

void dfs(ll u,ll sl){
	if(sl!=-1)ans.pb(sl+'a');
	if(term[u])ans.pb('P');
	for(int i=0;i<26;++i){
		if(ch[u][i])dfs(ch[u][i],i);
	}
	if(u!=1)ans.pb('-');
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    ll n;cin>>n;
    while(n--){
    	string s;
    	cin>>s;
    	ins(s);
    }

    dfs(1,-1);

    n=ans.size();
    ll sz=0,len=0,mx=-1,id=-1;
    for(int i=0;i<n;++i){
    	sz+=(ans[i]=='-'?-1:(ans[i]!='P'));
    	if(ans[i]=='-')++len;
    	else len=0;
    	if(!sz){
    		if(len>mx){
    			mx=len;
    			id=i;
    		}
    	}
    }

    vector<char>ans2=ans;
    if(id!=-1){
    	ans2.clear();
    	for(int i=id+1;i<n;++i)
    		ans2.push_back(ans[i]);
    	for(int i=0;i<=id;++i)
    		ans2.push_back(ans[i]);
    }

    while(ans2.size()&&ans2.back()=='-')
    	ans2.pop_back();
    cout<<ans2.size()<<'\n';
    for(char&c:ans2)
    	cout<<c<<'\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...