ABC302C Almost Equal
[ABC302C] Almost Equal
题面翻译
题目描述
给定 $ N $ 个长度为 $ M $ 的仅包含小写英文字母的字符串 $ S_1, S_2, \cdots, S_N $。保证 $ S_i $ 互不相同。
判断是否可以通过对这些字符串重新排序,得到一个新的字符串序列 $ T_1, T_2, \cdots, T_N $,使得:
- 对于任意 $ i $ 使得 $ 1 \le i \le N - 1 $,均满足 $ T_i $ 在改变恰好一个字母后可以等于 $ T_{i + 1} $。
数据范围
- $ 2 \le N \le 8 $
- $ 1 \le M \le 5 $
- 保证 $ S_i $ 长度为 $ M $,且仅由小写英文字母组成。$ (1 \le i \le N) $
- 保证 $ S_i $ 互不相同。
样例一解释
安排顺序如下:abcd
,abed
,bbed
,fbed
。满足条件。
样例二解释
无论如何对这两个字符串排序,均不可能满足条件。
题目描述
英小文字からなる長さ $ M $ の文字列 $ N $ 個 $ S_1,S_2,\dots,S_N $ が与えられます。ここで、$ S_i $ は互いに異なります。
これらを並び替えた文字列の列 $ T_1,T_2,\dots,T_N $ であって、以下の条件を満たすものが存在するか判定してください。
- $ 1\ \le\ i\ \le\ N-1 $ を満たす全ての整数 $ i $ に対して、$ T_i $ を $ 1 $ 文字だけ別の英小文字に変えて $ T_{i+1} $ にすることが出来る。
输入格式
入力は以下の形式で標準入力から与えられる。
$ N $ $ M $ $ S_1 $ $ S_2 $ $ \vdots $ $ S_N $
输出格式
問題文の条件を満たす列が存在するならば Yes
を、そうでないならば No
を出力せよ。
样例 #1
样例输入 #1
1 | 4 4 |
样例输出 #1
1 | Yes |
样例 #2
样例输入 #2
1 | 2 5 |
样例输出 #2
1 | No |
样例 #3
样例输入 #3
1 | 8 4 |
样例输出 #3
1 | Yes |
提示
制約
- $ 2\ \le\ N\ \le\ 8 $
- $ 1\ \le\ M\ \le\ 5 $
- $ S_i $ は英小文字からなる長さ $ M $ の文字列である。$ (1\ \le\ i\ \le\ N) $
- $ S_i $ は互いに異なる。
Sample Explanation 1
abcd
, abed
, bbed
, fbed
の順に並び替えると条件を満たします。
Sample Explanation 2
どのように並び替えても条件を満たすことは出来ません。
题解
题目解析
一道考全排列的题,我一开始用的dfs,结果越写越不对劲…然后我突然想起jiangly做了这道题,我就翻了翻他BB空间.然后找到了他的写法.一看,码风简介易懂.这道题他用了next_permutation()
函数.就是暴力嘛,数据不是挺大.
AC代码
1 |
|
Remark
- 使用
next_permutaion()
前必须sort()
,要不然排列会不完全. vector<T> V(n)
表示开n个空间的向量.- 使用
next_permutaion()
时可以搭配do-while
使用.
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Xunyoyo!