???CF886D???Restoration of string ??????

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了???CF886D???Restoration of string ??????相关的知识,希望对你有一定的参考价值。

?????????char   ??????   span   body   turn   ??????   highlight   log   can   

???CF886D???Restoration of string

??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

?????????????????????????????????S?????????????????????S?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

|S|<=100000

??????????????????????????????????????????????????????????????????

????????????S??????????????????????????????ab???????????????a?????????????????????b????????????????????????a???b??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int n,m,flag;
char s[100010];
int to[30],vis[30],from[30],used[30];
int main()
{
	memset(to,-1,sizeof(to)),memset(from,-1,sizeof(from));
	scanf("%d",&n);
	int i,j,a,b,l;
	for(i=1;i<=n;i++)
	{
		scanf("%s",s),l=strlen(s),s[l]=???a???-1;
		for(j=1;j<l;j++)
		{
			a=s[j-1]-???a???,b=s[j]-???a???;
			if((to[a]!=-1&&to[a]!=b)||(from[b]!=-1&&from[b]!=a))
			{
				puts("NO");
				return 0;
			}
			to[a]=b,from[b]=a,vis[b]=1;
		}
		vis[s[0]-???a???]=1;
	}
	for(i=0;i<26;i++)	if(vis[i]&&from[i]==-1)	for(j=i;j!=-1;j=to[j])	s[m++]=j+???a???,used[j]=1;
	for(i=0;i<26;i++)	if(vis[i]&&!used[i])
	{
		puts("NO");
		return 0;
	}	
	s[m]=???\0???,printf("%s",s);
	return 0;
}//4 mail ai lru cf

以上是关于???CF886D???Restoration of string ??????的主要内容,如果未能解决你的问题,请参考以下文章

CF1023D Array Restoration

CF1023D Array Restoration

CF886C Petya and Catacombs

CF886E 题解

CF886F Symmetric Projections

CF886E Maximum Element