1. 程式人生 > >PAT 1015.德才論

PAT 1015.德才論

lan pin pre lse gif col 德才論 spa href

題目: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

PAT 1015.德才論