84pts!!求助!求大佬!

P1104 生日

Wangyuqi2010 @ 2024-02-29 13:13:56

#include<iostream>
#include<algorithm> 
using namespace std;
struct pe{
    string name;
    int n,y,t;
}p[5050];
bool cmp(pe a,pe b){
    if(a.n!=b.n)
        return a.n>b.n;
    else if(a.y!=b.y) 
        return a.y>b.y;
    else if(a.t!=b.t) 
        return a.t>b.t;
    else return a.name>b.name;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>p[i].name>>p[i].n>>p[i].y>>p[i].t;
    }
    sort(p+1,p+n+1,cmp);
    for(int i=n;i>0;i--){
        cout<<p[i].name<<endl;
    }
    return 0;
}

by cute_overmind @ 2024-02-29 13:21:23

如果有两个同学生日相同,输入靠后的同学先输出

所以你需要一个id来记他们的编号


by leiaxiwo @ 2024-02-29 13:21:31

@Wangyuqi2010 如果有两个同学生日相同,输入靠后的同学先输出,你试试


by TheForgotten @ 2024-02-29 13:22:03

偶然看见一次远古提交

最原始的方法最有效

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

by TheForgotten @ 2024-02-29 13:22:29

能互关吗


by fqzcwei @ 2024-02-29 21:26:07

哎哟曲奇不要在卷了 虽然我已经做完了


|