题目大意
给出一堆人的生日,要你求生日相同的人。
解
求生日的哈希值,排序。
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct asdf{
string name;
int month, day;
} a[100005];
int n;
bool cmp(asdf aa, asdf bb){
if(aa.month < bb.month || (aa.month == bb.month && aa.day < bb.day)) return 1;
if(aa.month == bb.month && aa.day == bb.day && aa.name.size() < bb.name.size()) return 1;
if(aa.month == bb.month && aa.day == bb.day && aa.name.size() == bb.name.size() && aa.name < bb.name) return 1;
return 0;
}
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; ++i){
cin>>a[i].name;
scanf("%d%d", &a[i].month, &a[i].day);
}
sort(a+1, a+1+n, cmp);
for(int i = 1; i <= n; ++i){
// cout<<"### "<<a[i].month<<","<<a[i].day<<"--"<<a[i].name<<endl;
if(a[i].month == a[i-1].month && a[i].day == a[i-1].day){
if(a[i].month != a[i-2].month || a[i].day != a[i-2].day)
cout<<a[i].month<<" "<<a[i].day<<" "<<a[i-1].name;
cout<<" "<<a[i].name;
}
else if(a[i-1].month == a[i-2].month && a[i-1].day == a[i-2].day) printf("\n");
}
}