描述
题解
简单的字符串排序去重问题,用 map 搞搞,打标签,然后用 vector 存储,搞搞事情,最后输出,多于 5 个输出前 5 个,少于 5 个,有几个输出几个……注意,去重的时候只是去掉相同的词,但是个数还是要算的。
我一开始忘了去重,╮(╯▽╰)╭哎,以后打比赛前夕再也不熬夜了,晚上五点才睡,第二天各种 bug 各种 wa~~~
代码
#include <iostream>
#include <algorithm>
#include <map>
#include <string>
#include <vector>
using namespace std;
const int MAXN = 33333;
int cnt = 0, head = 1;
string s;
string A[MAXN];
string B[MAXN];
map<string, int> msi;
vector<string> vs[MAXN];
bool cmp(vector<string> a, vector<string> b)
{
if (a.size() != b.size())
{
return a.size() > b.size();
}
for (int i = 0; i < a.size(); i++)
{
if (a[i] != b[i])
{
return a[i] < b[i];
}
}
return 0;
}
int main(int argc, const char * argv[])
{
// freopen("/Users/zyj/Desktop/input.txt", "r", stdin);
while (cin >> s)
{
A[cnt] = s;
sort(s.begin(), s.end());
if (msi[s] == 0)
{
msi[s] = head++;
}
vs[msi[s]].push_back(A[cnt]);
cnt++;
}
for (int i = 1; i < head; i++)
{
sort(vs[i].begin(), vs[i].end());
unique(vs[i].begin(), vs[i].end());
}
sort(vs + 1, vs + head, cmp);
if (head > 5)
{
for (int i = 1; i <= 5; i++)
{
printf("Group of size %lu: ", vs[i].size());
for (int j = 0; j < vs[i].size(); j++)
{
if (j > 0 && vs[i][j] <= vs[i][j - 1])
{
break;
}
cout << vs[i][j] << ' ';
}
puts(".");
}
}
else
{
for (int i = 1; i < head; i++)
{
printf("Group of size %lu: ", vs[i].size());
for (int j = 0; j < vs[i].size(); j++)
{
cout << vs[i][j] << ' ';
}
puts(".");
}
}
return 0;
}