NOJ 240题小明的调查统计(二)结构体按照多个条件排序

来源:互联网 发布:网络专科可以自考本科 编辑:程序博客网 时间:2024/05/17 10:05

题目链接~~>

这一题其实一点也不难,属于简单题。开始wrong了好几次,后来才发现sort排序不稳定,需要在给结构体排序时先按成绩排,如果成绩一样,再按班级号从小到大排,如果班级 号一样,再按学号从小到大排!!!

代码:

#include<stdio.h>#include<algorithm>using namespace std;struct zhang{     int a,b,exam,c;    }t[100005];bool cmp(zhang x,zhang y){    if(x.exam!=y.exam)             return x.exam > y.exam ;    else if(x.a!=y.a)             return x.a < y.a ;    else             return x.b < y.b ;}int main(){    int r=0,T,n,m,m1,j=0,i;    scanf("%d%d",&T,&m);    while(T--)    {       scanf("%d",&n);          j++;//班级       for(i=1;i<=n;i++)        {            scanf("%d",&t[r].exam);            t[r].a=j;t[r].b=i;              r++;        }     }    sort(t,t+r,cmp);       t[0].c=1;    for(i=1;i<r;i++)      if(t[i].exam==t[i-1].exam)           t[i].c=t[i-1].c;      else t[i].c=t[i-1].c+1;    while(m--)    {        scanf("%d",&m1);       for(i=0;i<r;i++)        {             if(t[i].c==m1)                    printf("%d %d\n",t[i].a,t[i].b);             else if(t[i].c>m1)                   break;        }    }    return 0;}


 

原创粉丝点击