55分,求助。
  • 板块P1127 词链
  • 楼主newbie_QwQ
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/12/6 23:21
  • 上次更新2023/10/28 20:42:41
查看原帖
55分,求助。
535491
newbie_QwQ楼主2022/12/6 23:21
#include<bits/stdc++.h>
using namespace std;
vector<int> g[100005],v[100005];
struct edge
{
	int q,s;
	string wd;
}e[200005];
int in[100005],out[100005],nw[100005],now,step[200005];
bool cmp(edge a,edge b)
{
	if(a.q==b.q) 
	{
		if(a.s==b.s) return a.wd<b.wd;
		else return a.s<b.s;
	}
	else return a.q<b.q;
}
int hsh(char c)
{
	return c-'a'+1;
}
void dfs(int p,int k)
{
	int s=g[p].size(),te;
	for(int i=nw[p];i<s;i=max(i+1,nw[p]))
	{
		if(v[p][i]!=0)
		{
			te=v[p][i];
			v[p][i]=0;
			nw[p]=i+1;
			dfs(g[p][i],te);
		}
	}
	step[++now]=k;
}
int main()
{
	int i,j,n,m,f,fl,k=1;
	char st,ed;
	cin>>n;
	//freopen("P7771_10.in.txt","r",stdin);
	//freopen("P7771_10.out","w",stdout);
	for(i=1;i<=n;i++) 
	{
		cin>>e[i].wd;
		e[i].q=hsh(e[i].wd[0]);
		e[i].s=hsh(e[i].wd[e[i].wd.size()-1]);
	}
	sort(e+1,e+n+1,cmp);
	for(i=1;i<=n;i++) 
	{
		out[e[i].q]++;
		in[e[i].s]++;
		g[e[i].q].push_back(e[i].s);
		//cout<<g[e[i].q][g[i].size()]<<endl;
		v[e[i].q].push_back(i);
	}
	f=fl=0;
	for(i=1;i<=26;i++)
	{
		if(out[i]==in[i]+1) 
		{
			if(f==1) 
			{
				cout<<"***";
				return 0;
			}
			else f=1,k=i;
		}
		else if(out[i]==in[i]-1)
		{
			if(fl==1) 
			{
				cout<<"***";
				return 0;
			}
			else fl=1;
		}
		else if(out[i]==in[i])
		{
			out[i]=in[i];
		}
		else
		{
			cout<<"***";
			return 0;
		}
	}
	if((f==0&&fl==1)||(f==1&&fl==0))
	{
		cout<<"***";
		return 0;
	}
	if(f==0&&fl==0)
	{
		for(i=1;i<=26;i++)
		{
			if(in[i]==out[i]&&in[i]!=0) 
			{
				k=i;
				break;
			}
		}
	}
	dfs(k,1);
	for(i=1;i<=26;i++)
	{
		for(j=0;j<v[i].size();j++)
		{
				if(v[i][j]!=0)
			{
				cout<<"***";
				return 0;
			}
		}
	}
	for(i=now-1;i>=1;i--) 
	{
		if(i==1) cout<<e[step[i]].wd;
		else cout<<e[step[i]].wd<<".";
	}
	return 0;
}


帮个忙吧,调不动了!!!

2022/12/6 23:21
加载中...