RE了,本地跑是没有问题的,求调

P1104 生日

zgrx @ 2024-12-12 17:46:11

思路:看了题解的“通过把年+月+日摞成一个数字(生日数),比较生日数的大小来决定输入输出顺序”这个想法以后决定自己实现一下

为方便大家阅读我写了一些注释。

#include <bits/stdc++.h>
using namespace std;

int n;
struct Student {
    string name;
    int year, month, day, number;
    long long sum;
}a[101];

int main() {
    cin >> n;

    // 输入学生的出生日期
    //为了实现“如果有两个同学生日相同,输入靠后的同学先输出”我加入了一个number
    for (int i = 0; i < n; i++) {
        cin >> a[i].name >> a[i].year >> a[i].month >> a[i].day;
        a[i].number = n - i; // 输入顺序,靠后的值大
    }

    // 计算生日数sum
    for (int i = 0; i < n; i++) {
        a[i].sum = a[i].year * 10000 + a[i].month * 100 + a[i].day;
    }

    // 用sort排序
    sort(a, a + n, [](const Student &x, const Student &y) {
        if (x.sum != y.sum) 
            return x.sum < y.sum; 
        return x.number > y.number;
    });
  //最后输出
    for (int i = 0; i < n; i++) {
        cout << a[i].name << endl;
    }

    return 0;
}

by niuniudundun @ 2024-12-12 17:59:27

@zgrx

a[i].number = n - i;

by andycode @ 2024-12-12 18:03:03

@zgrx return x.number > y.number; 应改成 return x.number < y.number;


by zgrx @ 2024-12-12 23:23:49

@andycode @niuniudundun 感谢两位的修正我已经修改

a[i].number = n - i;

直接赋值为i了 已经AC了 不知道为什么中午的时候还全RE,晚上再提交的时候就好了


|