求助

P1104 生日

wei345 @ 2024-02-18 19:32:02

4,5过不了```cpp

include<iostream>

include<algorithm>

using namespace std;
struct St{
string s;
int y,m,d,id,k;
}a[110];
int cmp(St a,St b){
if(a.k<b.k) return 1;
else if(a.k==b.k) return a.id<b.id;
return 0;
}
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].y>>a[i].m>>a[i].d;
a[i].id=i;
a[i].k=a[i].d+a[i].m100+a[i].y10000;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
cout<<a[i].s<<endl;
}
return 0;
}


by liuzilin114514 @ 2024-02-18 19:42:59

@wei345 给你改的,但是不是你的思路

#include<iostream>
#include<algorithm>
using namespace std;
struct St{
    string s;
    int y,m,d;
}a[110];
int cmp(St a,St 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.s>b.s){
                    return 1;
                }
                return 0;
            }
            return 0;
        }
        return 0;
    }
    return 0;
}
int n;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].s>>a[i].y>>a[i].m>>a[i].d;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<a[i].s<<endl;
    }
return 0;
}

by liuzilin114514 @ 2024-02-18 19:43:33

@wei345 不懂再找我


by danlao @ 2024-02-18 19:48:43

@wei345 用冒泡试试。


by liuzilin114514 @ 2024-02-18 19:53:59

@yaodiguoan 冒泡比sort麻烦


by danlao @ 2024-02-18 19:57:04

@liuzilin114514 但我有时用 sort 排序结构体,结果很容易出bag,换成冒泡就可以了。


by liuzilin114514 @ 2024-02-18 20:00:47

@yaodiguoan sort还有bug?


by danlao @ 2024-02-18 20:01:33

@liuzilin114514 我把那道题找出来看看。


by liuzilin114514 @ 2024-02-18 20:01:38

@yaodiguoan 但这道题我用sortAC了


by liuzilin114514 @ 2024-02-18 20:03:03

@yaodiguoan OK


by danlao @ 2024-02-18 20:04:26

@liuzilin114514 @wei345 等一下我找到问题了,题目说“如果有两个同学生日相同,输入靠后的同学先输出”,他这里好像是靠前?


| 下一页