渣渣ACM日记——240-小明的调查统计(二)(NYOJ)

来源:互联网 发布:excel数据求和怎么用 编辑:程序博客网 时间:2024/04/28 08:58

小明的调查统计(二)

时间限制: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 410 23 56 89 41 23 54 65 23 89 683 89 78 855 56 68 76 56 741234
样例输出
1 31 92 12 32 23 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;}        


0 0
原创粉丝点击