ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UOJ #492.单词游戏

2019-07-15 14:00:23  阅读:299  来源: 互联网

标签:ch door opened possible 单词 cannot UOJ 盘子 492



【题目描述】:

有 N 个盘子,每个盘子上写着一个仅由小写字母组成的英文单词。你需要给这些盘子安排一个合适的顺序,使得相邻两个盘子中,前一个盘子上单词的末字母等于后一个盘子上单词的首字母。请你编写一个程序,判断是否能达到这一要求。如果能,请给出一个合适的顺序。
【输入描述】:

多组数据。第一行给出数据组数T,每组数据第一行给出盘子数量N,接下去N行给出小写字母字符串,一种字符串可能出现多次。
【输出描述】:

若存在一组合法解输出“Ordering is possible.”,否则输出“The door cannot be opened.”。
【样例输入】:

3
2
acm
ibm
3
acm
malform
mouse
2
ok
ok

【样例输出】:

The door cannot be opened.
Ordering is possible.
The door cannot be opened.

【时间限制、数据范围及描述】:

时间:1s 空间:64M

1<=N<=10^5;|S|<=1000

本题直接将每个单词的首字母和尾字母连一条有向边,然后判断是否存在欧拉路径即可。

Code:
#include<bits/stdc++.h>
#define M(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
using namespace std;
inline void read(int &x){
    char ch=getchar(),c=ch;
    x=0;
    while(ch<'0' || ch>'9'){
         c=ch;
         ch=getchar();
    }
    while(ch>='0' && ch<='9'){
        x=(x<<1)+(x<<3)+ch-'0';
        ch=getchar();
    }
    if(c=='-')x=-x;
} 


char s[1001];
int t,n,m,i,a,b,c,l,r;
int fa[50],u[50],v[50];
int find(int x){
    return fa[x]==x?x:fa[x]=find(fa[x]);
}
int main(){
    read(t);
    while(t--){
        memset(u,0,sizeof u);
        memset(v,0,sizeof v);
        read(n);
        a=b=c=0;
        for(i=1;i<=30;i++)fa[i]=i;
        for(i=1;i<=n;i++){
            scanf("%s",s+1);
            m=strlen(s+1);
            l=s[1]-'a'+1;
            r=s[m]-'a'+1;
            fa[find(l)]=find(r);
            u[l]++;
            v[r]++;
        }
        for(i=1;i<=26;i++)if(((u[i]||v[i])&&(find(i)==i))||u[i]-v[i]>1||u[i]-v[i]<-1)a++;
        if(a>1){
            puts("The door cannot be opened.");
            continue;
    }
        for(i=1;i<=26;i++)
            if(u[i]>v[i])b++;
            else if(u[i]<v[i]){
                c++;
            }
        if(b!=c||b>1){
            puts("The door cannot be opened.");
            continue;
        }
        puts("Ordering is possible.");
    }
    return 0;
}

标签:ch,door,opened,possible,单词,cannot,UOJ,盘子,492
来源: https://www.cnblogs.com/ukcxrtjr/p/11188463.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有