小明的调查统计(二)
时间限制:
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; }
-
只有一组测试数据