【1062】Talent and Virtue (25 分)

简介: 【1062】Talent and Virtue (25 分)【1062】Talent and Virtue (25 分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std; 
//评分,第四类放最后,排序,记得保存及格人数方便打印
struct Student{
  char id[10];  //准考证号
  int de,cai,sum; //德分,才分,总分
  int flag;  //考生类别:第1类~第5类
}stu[100010];
bool cmp(Student a,Student b){
  if(a.flag != b.flag) return a.flag<b.flag;
  else if(a.sum != b.sum) return a.sum>b.sum;
  else if(a.de != b.de)  return a.de>b.de;
  else return strcmp(a.id,b.id) <0; //德分相同则准考证小的在前面
}
int main(){   
  int n,L,H;
  scanf("%d%d%d",&n,&L,&H);
  int m=n;  //m为几个人数,方便后面统计及格人数
  for(int i=0;i<n;i++){ 
    scanf("%s%d%d",stu[i].id, &stu[i].de, &stu[i].cai );
    stu[i].sum=stu[i].de+stu[i].cai;  //计算总分
    if(stu[i].de < L ||  stu[i].cai <L ){
      stu[i].flag=5;  
      m--;  //及格人数减1
    }
    else if(stu[i].de >= H && stu[i].cai>=H)  stu[i].flag=1;
    else if(stu[i].de >= H && stu[i].cai<H)  stu[i].flag=2;
    else if(stu[i].de >= stu[i].cai)  stu[i].flag=3;
    else stu[i].flag=4;  //第四类情况最多,因此放在最后
  }
  sort(stu, stu+n,cmp);
  printf("%d\n",m);
  for(int i=0;i<m;i++){
     printf("%s %d %d\n",stu[i].id,stu[i].de,stu[i].cai);
  }
  system("pause");
    return 0;   
}
相关文章
|
6月前
|
存储 编解码
1068 万绿丛中一点红 (20 分)
1068 万绿丛中一点红 (20 分)
|
6月前
|
测试技术
1039 到底买不买 (20 分)
1039 到底买不买 (20 分)
|
6月前
1062 最简分数 (20 分)
1062 最简分数 (20 分)
L1-044 稳赢 (15 分)
L1-044 稳赢 (15 分)
154 0
L1-044 稳赢 (15 分)
L1-041 寻找250 (10 分)
L1-041 寻找250 (10 分)
221 0
L1-041 寻找250 (10 分)
h0148. 66 (30 分)
h0148. 66 (30 分)
103 0
L3-011 直捣黄龙 (30 分)
L3-011 直捣黄龙 (30 分)
133 0
L1-054 福到了 (15 分)
L1-054 福到了 (15 分)
145 0
L1-031 到底是不是太胖了 (10 分)
L1-031 到底是不是太胖了 (10 分)
167 0
L1-059 敲笨钟 (20 分)
L1-059 敲笨钟 (20 分)
128 0