nyist 240小明の調査統計(二)

15919 ワード

http://acm.nyist.net/JudgeOnline/problem.php?pid=240
 
明ちゃんの調査統計(二)
時間制限:1000 ms|メモリ制限:65535 KB
難易度:1
 
説明
最近、明ちゃんたちのサークルは理工学の全校のクラスごとに社会調査を行い、学生ごとの数学の成績を統計した.明ちゃんの任務は先生が全校の成績がn位の同級生のクラス番号とクラス番号(成績が同じなら同じ順位に並ぶ)を知りたいので、今あなたは明ちゃんを助けてこの任務を完成するプログラムを編む必要があります.
 
入力
テストデータのセットのみ
1行目は正の整数T(0その後、T行のデータがあり、i行目はクラス番号iのクラスを表し、各行の最初の数N(0その後のM行データは、各行のデータに正の整数Qがあり、全校数学成績ランキングQ位のすべての学生のクラス番号とクラス番号を検索することを示す.
しゅつりょく
検索出力が1行を占めるたびに、出力成績は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
",i+1,j+1); 35 } 36 return 0; 37 }

View Code
構造体のソート:

 1 #include <iostream>

 2 #include <algorithm>

 3 using namespace std;

 4 

 5 struct data//data       

 6 {

 7     int number;//  

 8     int *p;//    

 9 };

10 

11 struct one

12 {

13     int c;//  

14     int zb;//  

15     int z;//  

16     int w;//  

17 };

18 

19 //   sort  ,        ,        ,        

20 bool cmp(one a,one b)

21 {

22     if(a.z!=b.z)return a.z>b.z;

23     if(a.c!=b.c)return a.c<b.c;

24     return a.zb<b.zb;

25 }

26 int main()

27 {

28     data *s;

29     one x[100010];

30     int t,m,i,j,k=0;

31     cin>>t>>m;

32     s=new data[t];

33     for(i=0; i<t; i++) //    

34     {

35         cin>>s[i].number;

36         s[i].p=new int[s[i].number];

37         for(j=0; j<s[i].number; j++)

38         {

39             cin>>s[i].p[j];

40             x[k].zb=j+1;

41             x[k].z=s[i].p[j];

42             x[k].c=i+1;

43             k++;

44         }

45     }

46     sort(x,x+k,cmp);

47     int count=1,h=x[0].z,temp;

48     for(i=0; i<k; i++) //

49     {

50         if(x[i].z!=h)

51         {

52             h=x[i].z;

53             count++;

54         }

55         x[i].w=count;

56     }

57     while(m--)

58     {

59         cin>>temp;

60         for(i=0; i<k; i++)

61         {

62             if(temp==x[i].w) cout<<x[i].c<<" "<<x[i].zb<<endl;

63             if(x[i].w>temp) break;

64         }

65     }

66     return 0;

67 }

View Code