EDJIW @ 2024-11-29 22:16:09
AC:
bool cmp(Node x,Node y){
if(x.ug==y.ug)return x.kk>y.kk;//kk是输入顺序
return x.ug<y.ug;//ug是用sting表示生日
}
WA #5:
bool cmp(Node x,Node y){;
return x.ug<=y.ug;//含义与上同
}
我也不知哪里有错,反正改了就对了,求dalao指点
by shawn0618 @ 2024-11-29 22:22:01
@EDJIW
如果相等的话,执行交换,然而题目要求保留原顺序,所以前者ac。
by shawn0618 @ 2024-11-29 22:23:45
我猜把后面的改成这样也对。
bool cmp(Node x,Node y){;
return x.ug<y.ug;
}
by LincW @ 2024-11-29 22:38:15
@EDJIW 要求 cmp(x,x)==false
by ppyycc @ 2024-11-29 22:57:34
含义并非与以上相同
AC 代码中的
所以通常在做与结构体排序有关的题通常会考虑多种情况(这也是个好习惯)。
代码:
#include<bits/stdc++.h>
using namespace std;
struct n_y_m_n
{
string name;
int yea, mou, day, now; //年、月、日、顺序
}lis[114514];
bool cmp(n_y_m_n b, n_y_m_n a) //猜猜为什么b在前
{
if (a.yea > b.yea) return 1;//-
if (a.yea < b.yea) return 0;// |
if (a.mou > b.mou) return 1;// |
if (a.mou < b.mou) return 0;// |—这里都是在不等的情况下由深及浅的判断 // |
if (a.day > b.day) return 1;// |
if (a.day < b.day) return 0;//-
if (a.now < b.now) return 1;//—这里进行全部相等的判断
else return 0;
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++) { cin >> lis[i].name >> lis[i].yea >> lis[i].mou >> lis[i].day; lis[i].now = i; }
sort(lis, lis + n, cmp);
for (int i = 0; i < n; i++)cout << lis[i].name << endl;
return 0;
}
by mingzhen_ikun @ 2024-12-04 22:22:05
别的不知道,不过建仪改成
bool cmp (const Node &a,const Node &b)
by mingzhen_ikun @ 2024-12-04 22:27:27
@ppyycc 怎么打出有颜色的字体还有这么小的字的?
by ppyycc @ 2024-12-07 21:50:15
@mingzhen_ikun
小字:6个#
颜色: