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

小明的调查统计(二)

时间限制: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;
}        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值