PAT 1015.德才论

题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312

思路借鉴:《算法笔记 上级训练实战指南》

这道题两个地方需要思路清晰。

   1.德才分类

     ⑤低于最低线:德<L  才<L

     ①才德全尽:德>H  才>H

     ②德胜才:德>=才

     ③才德兼亡&&德胜才:德>才>L

     ④其他             德>L 才>L

   2.cmp函数

然后我出现的问题在于

   1.sort函数范围限定成M,导致并不是所有人参加了排序

   2.第三类人的判断:德胜才也包含德=才,更改之后通过测试点2、3、4

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 using namespace std;
 5 typedef struct{
 6     char id[10];
 7     int de,cai,sum;
 8     int flag;
 9 }stu;
10 stu s[100010];
11 bool cmp(stu a,stu b){
12     if(a.flag!=b.flag) return (a.flag<b.flag);
13     else if(a.sum!=b.sum) return (a.sum>b.sum);
14     else if(a.de!=b.de) return (a.de>b.de);
15     else return strcmp(a.id,b.id)<0;
16 }
17 
18 int main(){
19     int N,L,H;
20     scanf("%d %d %d",&N,&L,&H);
21     int m=N;
22     for(int i=0;i<N;i++){
23         int de,cai;
24         scanf("%8s %d %d",s[i].id,&de,&cai);
25         s[i].de=de;
26         s[i].cai=cai;
27         s[i].sum=de+cai;
28         if(de<L||cai<L) {
29             s[i].flag=5;
30             m--;
31         }
32         else if(de>=H&&cai>=H) s[i].flag=1;
33         else if(de>=H&&cai<H) s[i].flag=2;
34         else if(de>=cai) s[i].flag=3; //
35         else s[i].flag=4;
36     }
37     sort(s,s+N,cmp);//
38     printf("%d",m);
39     for(int i=0;i<m;i++){
40         printf("\n%s %d %d",s[i].id,s[i].de,s[i].cai);
41     }
42     return 0;
43 }
View Code

猜你喜欢

转载自www.cnblogs.com/cuphead/p/9300364.html
今日推荐