小明的調查統計(二)
時間限制: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;
}