单词重组(题解)
yangmengcheng1103 · · 题解
【题目描述】
给你
【输入格式】
第一行输入一个正整数
【输出格式】
输出
【输入输出样例#1】
| word.in | word.out |
|---|---|
| 2 2 caa cbb 3 cba cba cbb | YES NO |
【数据范围与约定】
对于
【题目大意】
给定n个字符串任意交换后可以全部相同。
【解题思路】
那么就是保证存在的字母个数都要是
【本题错因】
没有判断字符串长度是否相同,因为这个题目是交换,而不是移动,所以只要是不一样长,就一定不相同
【AC代码】
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("word.in", "r", stdin);
freopen("word.out", "w", stdout);
int t, n;
string s;
cin >> t;
while (t--) {
cin >> n;
map<char, int> mp;
for (int i = 1; i <= n; i++) {
cin >> s;
for (int j = 0; j < s.size(); j++) //遍历字符串s
mp[s[j]]++; //建立映射 或者 桶
}
int flag = 0;
for (auto it : mp)
if (it.second % n != 0) { //判断字母的个数是否位n的倍数
flag = 1; //同一字符无法平均分配。
break;
}
if (flag) cout << "NO" << endl;
else cout << "YES" << endl;
}
return 0;
【具体原理】
该代码首先读取输入的组数
对于每一组数据,首先读取表示单词个数的值
接下来,遍历
最后,根据
这段代码的思路是通过统计每个字母的出现次数,判断每个字母是否能够平均分配给每个单词,从而判断能否让所有单词相同。