https://www.luogu.com.cn/problem/P1104 生日问题笔记

发布时间 2023-10-29 20:27:57作者: rw156

 

标记:当出现一组数据中有多个数据,这个时候我们常考虑用结构体去编写代码,因为结构体可以使得

几个本不相关的变量联系起来,并且当一个变量改变时,其他变量也会跟着改变,这使得代码变得简单。

使用结构体后,我们在读入数据之后,我们用sort  进行排序,并且构造一个cmp函数,使得我们的排序

满足题目的要求,是年龄从大到小进行排序(年龄大小是从小到大),cmp函数我们在这里考虑用bool

类型函数,因为节省空间,在函数中,我们对数据中的年龄,月份,日期进行逐步判断,对年龄进行排序,

注意题目中有个要求是当相同是我们输出靠后的同学,因此我们设置一个id = i,进行排序,这样自然靠后

的数据就会优先输出。

 

 

 

const int N= 1e5 + 5;
int n;

struct node {
string name;
int year;
int month;
int day;
int id;
} a[N];

bool cmp(node x,node y) {
if(x.year!=y.year) return x.year<y.year;
else if(x.month!=y.month) return x.month<y.month;
else if(x.day!=y.day) return x.day < y.day;
else return x.id>y.id;
}
int main() {
cin >>n;
for(int i =0; i<n; i++)
cin >>a[i].name >>a[i].year >> a[i].month >>a[i].day,a[i].id=i;

sort(a,a+n,cmp);

for(int i=0; i <n; i++) cout << a[i].name << endl;

return 0;
}