UVa - 12450 - SpaceRecon Tournament


先上题目:

Problem G: SpaceRecon Tournament

SpaceRecon, the hottest game of 2011, is a real-time strategy thriller where players control your armies to destroy their opponent. Players may choose from one of the three available races -- Xurks (biological), Protoast (technological), and Earthians (humanoids) -- to build their respective armies by collecting resources from the land and spending them on army units, upgrades, and infrastructure. The player who destroys or outlasts their opponent is victorious.

The game has an intricate single-player story mode where players recreate scenes of the survival of Earthian Commander John Rainard's travels through the Xurkling planet, and also the charades of once-Earthian-now-Xurkling Queen Stephanie Karpenter. After completing the 15 hours of single player gameplay, most users try their hand at multiplayer head-to-head battles online using Actionweb, the number one SpaceRecon game matching hub.

Actionweb hosts tournaments of 2^M players and publishes the results of each tournament by listing each player handle and the number of match victories in the tournament. Tournaments are series of head-to-head matches between two players, the winner of the round advancing to the next round. The first R rounds are best of three (i.e., win two matches to win the round, any unnecessary games are not played), the remaining rounds are best of five (i.e., win three matches to win the round, any unnecessary games are not played). Each tournament has a different value of R, but is not published.

Input Format

The first line is an integer N (1 <= N <= 100), the number of test cases, which follow. Each test case begins with a line containing an integer M (1 <= M <= 10). The following 2^M lines are of format "player_handle number_of_match_victories". Player handles are alphanumeric and between 1 and 16 characters long.

You may assume that the data provided describes a valid tournament.

Output Format

Print the player handles sorted in descending order of which round they survived to. For players who survived the same number of rounds, sort them lexicographically by player handle.

Sample Input

1
2
John 1
Jake 5
Joe 4
Jane 0

Sample Output

Jake
Joe
Jane
John

  题意:给你2^m个选手的比赛胜利情况,这2^m个选手进行挑战赛,问最终按照进行比赛的round数来排序输出,如果round数相同的就按照字典序输出。其中一个round有可能三局两胜有可能五局三胜。(前R场三局两胜,剩下的五局三胜)
  说实话第一次读题意的时候完全看不懂,看了好几次才看懂,比赛的时候觉得应该枚举R,因为m最大只有10,换而言之挑战赛构成的树最深只有10层,所以直接枚举R,如果有合法的状态就输出。结果不够时间敲,赛后听题解说的是R其实是确定的不需要枚举。
  刚才用自己的想法实现了一下,WA了主要还是没有确定R。其实分析一下可以发现,对于所有的人,明显胜利场数最多的人必定是冠军(树根)他的round数绝对是最多的,然后就是胜利场数稍微少一点的绝对是比冠军少一round,然后继续这样推下去就可以发现如果我们先按照胜利场数推下去的话我们可以发现,场数多的绝对是round数多,每一次我们可以确定2^i个人排在前面,最后就能将2^m的人都排好。

上代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <cstring>
 5 #include <utility>
 6 #include <vector>
 7 #include <queue>
 8 #include <algorithm>
 9 #define MAX 102
10 using namespace std;
11 
12 typedef pair<int,string> pii;
13 pii p;
14 vector<pii> u;
15 int m;
16 
17 bool cmp0(pii x,pii y){
18     return x.first==y.first ? x.second<y.second : x.first>y.first;
19 }
20 
21 bool cmp1(pii x,pii y){
22     return x.second<y.second;
23 }
24 
25 int main()
26 {
27     int t,n;
28     //freopen("data.txt","r",stdin);
29     ios::sync_with_stdio(false);
30     cin>>t;
31     while(t--){
32       cin>>m;
33       n=1<<m;
34       u.clear();
35       for(int i=0;i<n;i++){
36         cin>>p.second>>p.first;
37         u.push_back(p);
38       }
39       sort(u.begin(),u.end(),cmp0);
40       int bound=1;
41       for(vector<pii>::iterator it=u.begin()+1;it!=u.end();bound<<=1){
42             sort(it,it+bound,cmp1);
43             it=it+bound;
44       }
45       for(vector<pii>::iterator it=u.begin();it!=u.end();it++){
46           cout<<(*it).second<<endl;
47       }
48     }
49     return 0;
50 }
/*12450*/

优质内容筛选与推荐>>
1、自定义ProgressDialog
2、matlab练习程序(白平衡<灰度世界算法>)
3、hdu 4736 This Is The Job The Bear Finds(2013年成都ACM网络赛)
4、JS全国城市三级联动
5、19-05【icloud】照片备份


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn