【ybtoj 高效进阶 2.1】 【字符串】 生日相同
题目
解题思路
快排
相同的一起输出
没有相同的直接跳过
代码
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct lzf {
int r, y;
string m;
} f[100200];
int n, p = 0;
bool cmp(lzf x, lzf y) {
return ((x.y < y.y) || (x.y == y.y && x.r < y.r) ||
(x.y == y.y && x.r == y.r && x.m.size() < y.m.size()) ||
(x.y == y.y && x.r == y.r && x.m.size() == y.m.size() && x.m < y.m));
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
cin >> f[i].m >> f[i].y >> f[i].r;
sort(f + 1, f + n + 1, cmp);
int i = 0;
while (i < n) {
i++;
if (f[i].y == f[i + 1].y && f[i].r == f[i + 1].r)
{
printf("%d %d ", f[i].y, f[i].r);
cout << f[i].m << " ";
p = 1;
while (f[i].y == f[i + 1].y && f[i].r == f[i + 1].r && i <= n)
{
i++;
cout << f[i].m << " ";
}
printf("\n");
}
}
if (!p)
printf("None\n");
return 0;
}