单词游戏题解

博客介绍了如何解决ICPC CERC 1999/2000比赛中的一道题目,该题目要求将盘子按照特定条件排序。内容涉及利用欧拉通路和并查集判断是否存在满足条件的盘子排列顺序。通过分析错误的初始思路,提出正确的解题方法,并提供了样例输入和输出。
摘要由CSDN通过智能技术生成

题目:

来自 ICPC CERC 1999/2000,有改动。

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

输入:

多组数据。第一行给出数据组数 T T T ,每组数据第一行给出盘子数量 N N N ,接下去 N 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.

题解:

题意是将每个盘子连接起来,要满足相邻两个盘子的末尾和起点相同。
初始思路:将盘子看成点,如果找到两两盘子首末字母相同就建一条边,最后走一遍欧拉通路。但这显然是错的,因为欧拉通路要经过每一条边且不能重复,那麽只要两盘子建了边,它都要算,但题目是只要相邻两盘子满足条件即可,所以这种方法会跑重。
正解:
我们可以用每个盘子首末字母看成点,在每个盘子的首末字母间建一条边(即可以看成以每个盘子为边),最后对所有盘子的首末字母跑一遍欧拉通路即可,如果可以连通,即每条边(盘子)都可以连上,那么就满足题意,反之不满足。
如这一组:

3
acm
malform
mouse

有图:

在这里插入图片描述
它是欧拉通路所以满足。
最后还要判一遍这里面的点连不连通,所以可以用并查集,如果判到两个字母,那么就并到一起,最后判一遍即可

代码:

#include <iostream>
#include <cstdio>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值