http://acm.nyist.net/JudgeOnline/problem.php?pid=240

 

小明的调查统计(二)

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

分析:
结构体排序即可。

AC代码:
直接排序:
 1  
 2 #include<stdio.h>
 3 #include<algorithm>
 4 using namespace std;
 5 int main()
 6 {
 7     int T,M,N;
 8     int i,j,k,max=0;
 9     int b[200]={0},a[500][200]={0};
10     int num=0;
11     scanf("%d %d",&T,&M);
12     for(i=0;i<T;i++)
13     {
14         scanf("%d",&N);
15         if(max<N) max=N;
16         for(j=0;j<N;j++) 
17         {
18             scanf("%d",&a[i][j]);
19             int t=0;
20             for(k=0;k<num;k++)
21             if(a[i][j]==b[k]) t=1;
22             if(t==0)
23                 {b[num]=a[i][j];num++;}
24         }
25     }
26     sort(b,b+num);
27     while(M--)
28     {
29         int n;
30         scanf("%d",&n);
31         for(i=0;i<T;i++)
32         for(j=0;j<max;j++)
33         if(a[i][j]==b[num-n])
34         printf("%d %d\n",i+1,j+1);
35     }
36     return 0;
37 }
View Code

相关文章:

  • 2021-08-05
  • 2022-12-23
  • 2021-09-29
  • 2021-09-29
  • 2021-12-30
  • 2021-10-14
  • 2022-12-23
  • 2021-08-23
猜你喜欢
  • 2021-09-27
  • 2022-12-23
  • 2021-10-24
  • 2021-11-27
  • 2022-12-23
  • 2021-08-25
相关资源
相似解决方案