求大佬康康

P1104 生日

txdt @ 2024-11-29 19:46:28

就是80分,求大佬帮忙改改~

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

struct Student
{
    string name;
    int year;
    int month;
    int day;
    int num;
};

bool compare(const Student &s1, const Student &s2)
{
    return s1.num < s2.num;
}

int main()
{
    int n;
    cin>>n;
    vector<Student> students(n);
    for(int i=0;i<n;i++)
    {
        cin>>students[i].name >> students[i].year >> students[i].month >> students[i].day;
        students[i].num = students[i].year * 10000 + students[i].month * 100 + students[i].day;
    }
    sort(students.begin(),students.end(), compare);
    for(int i=0;i<n;i++)
    {
        cout<<students[i].name<<endl;
    }
    return 0;
}

我真的不知道怎么办了……


by Arefa @ 2024-11-29 19:56:38

题目要求:如果有两个同学生日相同,输入靠后的同学先输出。

而sort函数具有不稳定性,相同大小的两个变量的前后顺序是不确定的。

因此可以在 struct Student 中加入成员 int id,用于记录此人是第几个输入的。并在compare函数中,加入当s1.num 与 s2.num 相等时,return s1.id > s2.id


by txdt @ 2024-11-29 23:39:52

感谢大佬,过了过了!!


|