64分求解

P1104 生日

LGZX @ 2023-12-23 19:25:51

代码:

#include<bits/stdc++.h>
using namespace std;
struct mode{
    string s;
    int y,m,d,c;
};
bool cmp(mode a,mode b){
    if(a.y>b.y){
        return 1;
    }else if(a.y==b.y){
        if(a.m>b.m){
            return 1;
        }else if(a.m==b.m){
            if(a.d>b.d){
                return 1;
            }else if(a.d==b.d){
                if(a.c>b.c){
                    return 1;
                }else{
                    return 0;
                }
            }else{
                return 0;
            }
        }else{
            return 0;
        }
    }else{
        return 0;
    }
}
int main(void){
    int n;
    cin>>n;
    mode esd[n];
    for(int i=0;i<n;i++){
        cin>>esd[i].s>>esd[i].y>>esd[i].m>>esd[i].d;
        esd[i].c=i;
    }
    sort(esd,esd+n,cmp);
    for(int i=n-1;i>=0;i--){
        cout<<esd[i].s<<endl;
    }
}

测试点下下来对的,但是却WA哩qwq

求一下改


by GPUawa @ 2023-12-23 20:02:40

盲猜cmp的问题


by GPUawa @ 2023-12-23 20:06:05

84pts


by GPUawa @ 2023-12-23 20:12:11

@LGZX 懂了

  1. cmp函数有问题
  2. 需要使用stable_sortsort不是稳定排序(或者自己写排序)

cmp模板:

bool cmp(mode a,mode b){
    if(a.y==b.y && a.m==b.m && a.d==b.d) return 1;
    if(a.y!=b.y)
        return a.y<b.y;
    else if(a.m!=b.m)
        return a.m<b.m;
    else
        return a.d<b.d;
}

输出的时候就顺序输出, i0 开始

AC


by LGZX @ 2023-12-23 20:29:32

@GPUawa 谢谢!过了


|