hdoj 1084 What Is Your Grade?(sort函数按规则排序结构体数组)

来源:互联网 发布:windows hello好用吗 编辑:程序博客网 时间:2024/05/30 04:11

思路:对输入的学生的解决问题数和用时进行排序;先排解觉问题的数目,再排用时;

代码如下:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */struct node{int slove;long time;int order;int mark;}s[110];bool cmp1(node a,node b){return a.order<b.order;}bool cmp2(node a,node b){if(a.slove!=b.slove){return a.slove>b.slove;}else{return a.time<b.time;}}int main(int argc, char *argv[]) {        int t;    int k;    int h,m,ss;    int i;    int sum1,sum2,sum3,sum4;    int p1,p2,p3,p4;    int x;    x=0;    while(scanf("%d",&t)!=EOF)    {        if(t<0)    break;    k=0;    sum1=sum2=sum3=sum4=0;//记录有多少个 同样成绩的人     p1=p2=p3=p4=0;//记录同样成绩的人已经有多少个     while(t--)    {    scanf("%d %d:%d:%d",&s[k].slove,&h,&m,&ss);    s[k].time=h*3600+m*60+ss;    s[k].order=k;        k++;    }sort(s,s+k,cmp2);//按先解决的问题 数目,再解决的时间长短,进行排序; for(i=0;i<k;i++)//找相同成绩的人数 {if(s[i].slove==1)sum1++;if(s[i].slove==2)sum2++;if(s[i].slove==3)sum3++;if(s[i].slove==4)sum4++;}for(i=0;i<k;i++)//为每个人赋成绩; {switch (s[i].slove){case 0:s[i].mark=50;break;case 1:if(p1<sum1/2)s[i].mark=65;elses[i].mark=60;p1++;break;case 2:if(p2<sum2/2)s[i].mark=75;elses[i].mark=70;p2++;break;case 3:if(p3<sum3/2)s[i].mark=85;elses[i].mark=80;p3++;break;case 4:if(p4<sum4/2)s[i].mark=95;elses[i].mark=90;p4++;break;case 5:s[i].mark=100;break;}}sort(s,s+k,cmp1);for(i=0;i<k;i++)printf("%d\n",s[i].mark);printf("\n");}        return 0;}


原创粉丝点击