链接
题目描述
在一个大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。
样例输入
6
Avril 3 2
Candy 4 5
Tim 3 2
Sufia 4 5
Lagrange 4 5
Bill 3 2
样例输出
3 2 Tim Bill Avril
4 5 Candy Sufia Lagrange
思路
读入每个人的生日,按生日排序,然后一个个比较,输出就可以了
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
struct stu
{
string name;
int m, d;
}a[1000005];
int n;
bool cmp(stu i, stu j)
{
if(i.m != j.m) return i.m < j.m;
if(i.d != j.d) return i.d < j.d;
if(i.name.size() != j.name.size())
return i.name.size() < j.name.size();
return i.name < j.name;
}
int main()
{
cin>>n;
for(int i = 1; i <= n; ++i)
cin>>a[i].name>>a[i].m>>a[i].d;
sort(a + 1, a + n + 1, cmp);
for(int i = 1; i <= n; ++i)
{
if(a[i].m == a[i + 1].m && a[i].d == a[i + 1].d) {
cout<<a[i].m<<' '<<a[i].d<<' '<<a[i].name<<' ';
while(a[i].m == a[i + 1].m && a[i].d == a[i + 1].d) {
i++;
cout<<a[i].name<<' ';
}
cout<<endl;
}
}
return 0;
}