PAT 1015.德才論
阿新 • • 發佈:2018-07-12
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) returnView Code(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 }
PAT 1015.德才論