评测机说我短.jpg
  • 板块P1127 词链
  • 楼主Dreamweaver
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/10/18 18:50
  • 上次更新2023/11/4 03:22:48
查看原帖
评测机说我短.jpg
91956
Dreamweaver楼主2021/10/18 18:50

WA #2 too short on line 1

#include<iostream>
#include<cstdio>
#include<cmath>
#include<bitset>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<map>
using namespace std;
#define maxn 1010
#define inf 0x7f7f7f7f
#define mod 1000000007
#define int long long
#define re register
inline int read();
inline void wn(int x);
inline void wr(int x);
inline void wi(int x);
int n;
string a[maxn];
int rd[maxn],cd[maxn];
struct node
{
	int s,t,nex,v;
}edge[maxn];
int head[maxn],cnt;
void add(int s,int t)
{
	cd[s]++;
	rd[t]++;
	edge[++cnt].s=s;
	edge[cnt].t=t;
	edge[cnt].nex=head[s];
	head[s]=cnt;
}
bool del[maxn];
bool vis[maxn];
int ss[maxn],top;
void kkk(int x)
{
	vis[x]=true;
	for(re int i=head[x];i;i=edge[i].nex)
	{
		int tt=edge[i].t;
		if(!vis[tt])	kkk(tt);
	}
}
void dfs(int x)
{
	for(re int i=head[x];i;i=edge[i].nex)
	{
		if(del[i])	continue;
		int tt=edge[i].t;
		del[i]=true;
		dfs(tt);
		ss[++top]=i;
	}
}
void out()
{
	while(top>1)	cout<<a[ss[top--]]<<'.';
	cout<<a[ss[top--]];
}
bool cmp(string a,string b)
{
	return a>b;
}
signed main()
{
//	freopen("a.in","r",stdin);
//	freopen("a.out","w",stdout);
//	printf("%d M\n",((sizeof(z))>>20));
	cin>>n;
	for(re int i=1;i<=n;++i)	cin>>a[i];
	sort(a+1,a+n+1,cmp);
	for(re int i=1;i<=n;++i)	
		add(a[i][0]-'a'+1,a[i][a[i].size()-1]-'a'+1);
	for(re int i=1;i<=26;++i)
		if(cd[i])
		{
			kkk(i);
			break;
		}
	for(re int i=1;i<=26;++i)
		if((cd[i]||rd[i])&&!vis[i])	
		{
			puts("***");
			return 0;
		}
	int s=1,amo=0,amo1=0,amo2=0;
	int tot=0;
	for(re int i=1;i<=26;++i)
		if(cd[i]||rd[i])	tot++;
	for(re int i=1;i<=26;++i)
	{
		if(!cd[i]&&!rd[i])	continue;
		if(cd[i]-rd[i]==1)
			amo1++;
		if(cd[i]-rd[i]==-1)
			amo2++;
		if(cd[i]-rd[i]==0)
			amo++;
	}
//	wr(tot);
//	wi(amo1),wi(amo2),wr(amo);
	if(amo+amo1+amo2!=tot)
	{
		puts("***");
		return 0;
	}
	if(amo==tot)
	{
		dfs(1);
		out();
	}
	else
	{
//		if(amo1==1&&amo2==1)
//		{
			int s=1;
			for(re int i=1;i<=26;++i)	
				if(cd[i]-rd[i]==1)	s=i;
			dfs(s);
			out();
//		}
	 } 
	return 0;
}
//==========================================================
inline int read()
{
	int f=1,x=0;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')	f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=(x<<3)+(x<<1)+ch-'0';
		ch=getchar();
	}
	return x*f;
}
inline void wn(int x)
{
	if(x<0)
	{
		putchar('-');
		wn(-x);
		return ;
	}
	if(x>=10)	wn(x/10);
	putchar('0'+x%10);
}
inline void wr(int x)
{
	wn(x);
	putchar('\n');
}
inline void wi(int x)
{
	wn(x);
	putchar(' ');
}

2021/10/18 18:50
加载中...