就,莫名其妙就RE了
查看原帖
就,莫名其妙就RE了
186068
我怂了楼主2023/10/23 20:32

RE之后得到了44pts,求调qwq,其他点都AC了

#include<bits/stdc++.h>
using namespace std;
const int maxl=25,maxn=2.5e4+5;
int trie[maxl*25][26],cnt=0,front[maxn*25],ans=0;
bool mark[maxn*25],val[maxn*25];
char s[maxl+20];
int n,maxp,ma;
void ins(){
	int l=strlen(s+1);
	int p=0;
	for(int i=1;i<=l;i++){
		int r=s[i]-'a';
		if(!trie[p][r]){
			trie[p][r]=++cnt;
			front[cnt]=p;
		}
		p=trie[p][r];
	}
	val[p]=true;
	if(l>ma){
		ma=l;
		maxp=p;
	}
}
bool flag=false;
void dfs1(int x){
	if(val[x]){
		ans++;
	}
	for(int i=0;i<26;i++){
		if(trie[x][i]){
			ans++;
			dfs1(trie[x][i]);
			ans++;
		}
	}
}
void dfs2(int x){
	if(val[x]){
		cout<<"P\n";
		if(x==maxp){
			flag=true;
			return;
		}
	}
	int aa=-11;
	for(int i=0;i<26;i++){
		if(mark[trie[x][i]]){
			aa=i;
			continue;
		}
		if(trie[x][i]){
			cout<<char('a'+i)<<'\n';
			dfs2(trie[x][i]);
			if(flag){
				return;
			}
			cout<<"-\n";
		}
	}
	if(aa>=0){
		cout<<char(aa+'a')<<'\n';
		dfs2(trie[x][aa]);
		if(flag){
			return;
		}
		cout<<"-\n";
	}
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>(s+1);
		ins();
	}
	for(int i=maxp;i;i=front[i]){
		mark[i]=true;
	}
	dfs1(0);
	ans-=ma;
	cout<<ans<<'\n';
	dfs2(0);
}
2023/10/23 20:32
加载中...