最終順位sdut 2446

6423 ワード

最終順位
Time Limit: 1000ms   Memory limit: 65536K  質問は?ここをクリック^^;
タイトルの説明
タイトルリンク:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2446
第4回山東理工大学ACMネットプログラミングリング試合が終わった後、最終順位を決める必要があります.順位は問題数によって決まります.しかし、多くのチームが参加しており、手動で順位を計算することは試合のニーズを満たすことができない.現在、各チームのIDと作成したテーマ数を記録するリストがあります.プログラムを書いて、最終的なランキングを生成する必要があります.問題を簡略化するために,ここでのランキングルールは,問題数の多い列を上位に並べ,問題数が等しい場合は入力時の相対的な順序を変更しないようにする.
入力
 第1行は、T組の試験データがあることを示す正の整数T(1≦T≦15)を含む.データのセットの最初の行には正の整数N(1< N≦10000)は、チーム数を表す.次に、N行は、1≦ID≦10^7、0≦M≦100の2つの整数を含む.IDはチーム番号,Mは作成した問題数である.
 
しゅつりょく
 各グループのデータ出力はN行を含み、i行目には2つの整数があり、IDとMはi位の列のIDと作成した問題数を表す.
 
サンプル入力
1

8

1 2

16 3

11 2

20 3

3 5

26 4

7 1

22 4


サンプル出力
3 5

26 4

22 4

16 3

20 3

1 2

11 2

7 1

ヒント
 コード:

 1 #include<stdio.h>

 2 #include<iostream>

 3 #include<algorithm>

 4 using namespace std;

 5 struct vode

 6 {

 7     int id,chengji,shunxu;

 8 }f[1000];

 9 int cmp(const vode a,const vode b)

10 {

11     if(a.chengji>b.chengji)return 1;

12     else if(a.chengji<b.chengji)return 0;

13     else

14     {

15         if(a.shunxu>b.shunxu)return 0;

16         else return 1;

17     }

18 }

19 int main()

20 {

21     int zong ;

22     cin>>zong;

23     while(zong--)

24     {

25       int t;

26       cin>>t;

27       int i,j;

28       for(i=0;i<=t-1;i++)

29       {

30           cin>>f[i].id>>f[i].chengji;

31           f[i].shunxu=i;

32       }

33       sort(f,f+t,cmp);

34       for(i=0;i<=t-1;i++)

35           cout<<f[i].id<<" "<<f[i].chengji<<endl;

36     }

37     return 0;

38 }

View Code
題意ははっきりしていて、コードは簡単ですが、sort関数の使い方に注意してください.