nyoj-240-小明的调查统计(二)(结构体排序)

本博客详细介绍了如何通过编程帮助小明完成一项任务,即查询高校中数学成绩排名的班级号和学号。通过输入学校班级数和查询次数,读取各班级同学的数学成绩,并按成绩排序后,输出指定排名的同学信息。

小明的调查统计(二)

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 1
描述
最近小明他们社团对理工全校每个班级进行了一次社会调查,他们对每同学的数学成绩进行了统计。小明的任务是老师想知道全校成绩排在第n名同学的班级号和班级学号(如果成绩相同就并列排在同一名次),现在你需要编一个程序帮助小明来完成这个任务。
输入
只有一组测试数据
第一行输入正整数T(0<T<=500)和M(0<M<=101),表示学校的班级数和老师需要查询的次数
随后有T行数据,第i行表示班级号为i的班级,每行第一个数N(0<N<=200)表示这个班级有N个同学。接下来输入N个正整数,第j个正整数表示班级学号为j同学的数学成绩(0=<数学成绩<=100,班级号和班级学号都是从1开始)。
随后的M行数据,每行数据有一个正整数Q,表示查询全校数学成绩排名第Q位的所有同学的班级号和班级学号。
输出
每次查询输出占一行,输出成绩排在第Q位同学的班级号和学号(如果有多同学成绩并列排在在第Q名,那么按班级号从小到大输出,如果班级号相同那么按班级学号从小到大输出)
样例输入
3 4
10 23 56 89 41 23 54 65 23 89 68
3 89 78 85
5 56 68 76 56 74
1
2
3
4
样例输出
1 3
1 9
2 1
2 3
2 2
3 3
来源
[路过这]原创
上传者

路过这


#include<iostream>//结构体排序
#include<algorithm>
#include<cstdio>
using namespace std;
struct stu
{
    int ban;//班级号
    int xue;//学号
    int chen;//成绩
} a[100000+100];

bool cmp(const stu& a,const stu& b)//结构体排序
{
    if(a.chen==b.chen&&a.ban==b.ban)
        return a.xue<b.xue;
    if(a.chen==b.chen&&a.ban!=b.ban)
        return a.ban<b.ban;
    return a.chen>b.chen;
}

int main()
{
    int t,m,n,p=1,q,xun;
    cin>>t>>m;
    for(int i=1; i<=t; i++)//依次读取数据进结构体
    {
        scanf("%d",&n);
        for(int j=p; j<p+n; j++)// p用来累计人数和标记数组保存到的位置
        {
            scanf("%d",&q);
            a[j].chen=q;
            a[j].ban=i;
            a[j].xue=j-p+1;
        }
        p+=n;
    }
    sort(a+1,a+p,cmp);
    int b[100000+100]= {0},c=1;//用数组b来去除成绩重复,得到一个无重复的排好序的数组
    for(int i=1; i<p; i++)
    {
        if(a[i].chen!=a[i+1].chen)
            b[c++]=a[i].chen;
    }
    for(int i=1; i<=m; i++)
    {
        scanf("%d",&xun);//询问名次
        for(int j=1; j<p; j++)
        {
            if(a[j].chen==b[xun])//利用排好序的数组找到要输出的数据
                printf("%d %d\n",a[j].ban,a[j].xue);
        }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值