小明的调查统计(二)
时间限制: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 <vector> using namespace std; struct stu{ int score,clas,id; }; bool cmp(stu a,stu b){ if(a.score==b.score) { if(a.clas==b.clas) return a.id<b.id; return a.clas<b.clas; } return a.score>b.score; } stu s[100050]; vector<stu> ve[100050]; int main(){ int t,m,n,i,j,tmp; cin>>t>>m; int num=0; for(i=0;i<t;i++){ cin>>n; for(j=0;j<n;j++){ cin>>s[num].score; s[num].clas=i+1; s[num].id=j+1; num++; } } sort(s,s+num,cmp); int now=0; int last=s[0].score; ve[now].push_back(s[0]); for(i=1;i<num;i++){ if(s[i].score==last) ve[now].push_back(s[i]); else { now++; ve[now].push_back(s[i]); last=s[i].score; } } for(i=0;i<m;i++){ cin>>tmp; for(j=0;j<ve[tmp-1].size();j++) cout<<ve[tmp-1][j].clas<<" "<<ve[tmp-1][j].id<<endl; } return 0; }
- 只有一组测试数据