>Link
ybtoj生日相同
>解题思路
字符串排序…
>代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct node
{
int x, y, num, cnt;
} a[400];
string name, s[400][100010];
int n, x, y, m, bh[100][100];
bool v;
bool cmp (node aa, node bb)
{
if (aa.x != bb.x) return aa.x < bb.x;
return aa.y < bb.y;
}
bool cmp2 (string aa, string bb)
{
if (aa.size() != bb.size()) return aa.size() < bb.size();
return aa < bb;
} //名字按照题目要求排序
int main()
{
scanf ("%d", &n);
for (int i = 1; i <= n; i++)
{
cin >> name;
scanf ("%d%d", &x, &y);
if (bh[x][y] != 0) a[bh[x][y]].cnt++;
else
{
bh[x][y] = ++m;
a[bh[x][y]] = (node){
x, y, bh[x][y], 1};
}
s[bh[x][y]][a[bh[x][y]].cnt] = name;
}
sort (a + 1, a + 1 + m, cmp);
for (int i = 1; i <= m; i++)
if (a[i].cnt > 1)
{
printf ("%d %d ", a[i].x, a[i].y);
v = 1;
sort (s[a[i].num] + 1, s[a[i].num] + 1 + a[i].cnt, cmp2);
for (int j = 1; j <= a[i].cnt; j++)
cout << s[a[i].num][j] << " ";
printf ("\n");
}
if (!v) printf ("None");
return 0;
}