11分求助
查看原帖
11分求助
537998
lpx2024楼主2023/10/5 16:56

样例过了

#include <bits/stdc++.h>
using namespace std;
const int maxN=1000000;
int n,cnt,trie[maxN][26],ed[maxN],f[maxN];
char c[maxN];
string s1="";
void Insert(string s){
	int t=0;
	for(int i=0;i<s.size();i++){
		int p=s[i]-'a';
		if(s==s1) f[t]=p;
		if(!trie[t][p]) trie[t][p]=++cnt;
		t=trie[t][p];
	}
	ed[t]++;
}
void dfs(int x){
	for(int i=0;i<26;i++){
		if(!trie[x][i] || f[x]==i) continue;
		c[++cnt]=i+'a';
		dfs(trie[x][i]);
		if(!n) return;
		c[++cnt]='-';
	}
	if(f[x]){
		c[++cnt]=f[x]+'a';
		dfs(trie[x][f[x]]);
		if(!n) return;
		c[++cnt]='-';
	}
	for(int i=1;i<=ed[x];i++) c[++cnt]='P',n--;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		string s;
		cin>>s;
		if(s.size()>s1.size()) s1=s;
		Insert(s);
	}
	cnt=0;
	dfs(0);
	cout<<cnt<<endl;
	for(int i=1;i<=cnt;i++) cout<<c[i]<<endl;
	return 0;
}
2023/10/5 16:56
加载中...