排序问题
https://www.luogu.com.cn/problem/P1104 生日问题笔记
标记:当出现一组数据中有多个数据,这个时候我们常考虑用结构体去编写代码,因为结构体可以使得
几个本不相关的变量联系起来,并且当一个变量改变时,其他变量也会跟着改变,这使得代码变得简单。
使用结构体后,我们在读入数据之后,我们用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;
1 const int N= 1e5 + 5; 2 int n; 3 4 struct node { 5 string name; 6 int year; 7 int month; 8 int day; 9 int id; 10 } a[N]; 11 12 bool cmp(node x,node y) { 13 if(x.year!=y.year) return x.year<y.year; 14 else if(x.month!=y.month) return x.month<y.month; 15 else if(x.day!=y.day) return x.day < y.day; 16 else return x.id>y.id; 17 } 18 int main() { 19 cin >>n; 20 for(int i =0; i<n; i++) 21 cin >>a[i].name >>a[i].year >> a[i].month >>a[i].day,a[i].id=i; 22 sort(a,a+n,cmp); 23 24 for(int i=0; i <n; i++) cout << a[i].name << endl; 25 26 return 0; 27 }