64分求助!

P1104 生日

@[Volcano_j666](/user/636849) 输出格式中,“如果有两个同学生日相同,输入靠后的同学先输出”,您这个代码是先输入的输出了,可以改一下。
by tangrunxi @ 2022-05-28 17:54:50


@[tangrunxi](/user/231147) 应该怎么改,您能具体说一下吗,谢谢
by HiCode2009 @ 2022-05-28 17:56:01


@[Volcano_j666](/user/636849) 直接加 ``` else if(a[j].y==a[j+1].y&&a[j].m==a[j+1].m&&a[j].d==a[j+1].d)swap(a[j],a[j+1]); ``` 可得80分(一些往前的再排顺序会乱) 加一个a[i].qi(输入顺序)可得100见我代码 ``` #include<bits/stdc++.h> using namespace std; struct student{ string name; long long y,m,d,qi; }a[1001]; long long n; int main() { cin>>n; for(int i=1;i<=n;i++) {cin>>a[i].name>>a[i].y>>a[i].m>>a[i].d;a[i].qi=i;} for(int i=1;i<=n;i++) for(int j=1;j<=n-1;j++) { if(a[j].y>a[j+1].y) swap(a[j],a[j+1]); else if(a[j].y==a[j+1].y&&a[j].m>a[j+1].m) swap(a[j],a[j+1]); else if(a[j].y==a[j+1].y&&a[j].m==a[j+1].m&&a[j].d>a[j+1].d) swap(a[j],a[j+1]); else if(a[j].y==a[j+1].y&&a[j].m==a[j+1].m&&a[j].d==a[j+1].d&&a[j].qi<a[j+1].qi)swap(a[j],a[j+1]); } for(int i=1;i<=n;i++) cout<<a[i].name<<endl; return 0; } ```
by mzyczzx @ 2022-05-28 21:41:12


@[mzyczzx](/user/616407) 但是这样到后面不也会乱吗,我觉得有点巧合吧
by HiCode2009 @ 2022-06-01 18:05:57


@[Volcano_j666](/user/636849) 不会乱因为swap函数是把一整个结构体两边全部换所以qi也会换,举例: 输入 5 yjr1 2000 2 2 yjr2 2001 2 2 yjr3 2001 2 2 yjr4 2001 2 2 yjr5 2002 2 2 原序1,2,3,4,5 2与3换:1,3,2,4,5 2与4换:1,3,4,2,5 3与4换:1,4,3,2,5 这样顺序不会乱当然实在拿不准就用sort 详见第一篇题解,后来图论啥的还会用
by mzyczzx @ 2022-06-02 19:30:15


|