[lintcode]879. 输出赛程表

链接:http://lintcode.com/zh-cn/problem/output-contest-matches/

在NBA季后赛期间,我们总是安排一支实力相当强的球队去和实力较弱的球队比赛,比如让排名第一的球队和第n队一起比赛,这是一个让比赛更有趣的好策略。现在,你得到了n个团队,你需要以字符串的形式输出他们的最终比赛。
n组以正整数的形式给出,从1到n,表示它们的初始排名。(排名第一的是实力最强的球队,排名n最弱的球队。)我们将使用括号('(',')')和逗号(',')来表示比赛团队的配对-括号('(',')')用于对分区的配对和逗号(',')。在每一轮的配对过程中,你总是需要遵循一种策略,那就是让一个相当强的一对和一个相当弱的配对。

 注意事项
  1. The n is in range [2, 2^12].
  2. We ensure that the input n can be converted into the form 2^k, where k is a positive integer.
样例

给定 n = 2, 返回 "(1,2)".

解释: 
一开始,我们有队1和队2,位置是:1,2。
然后我们将团队(1,2)和‘(’、‘)’和‘,’组合在一起,这是最终的答案。

给定 n = 4, 返回 "((1,4),(2,3))"

解释: 
在第一轮中,我们将球队1和4,2和3组合在一起,因为我们需要把强大的队伍和弱队放在一起。
和我们有(1、4)(2、3)。
在第二轮中,(1,4)和(2,3)的获胜者需要再次发挥,以产生最终的胜利者,所以你需要在他们的外面加上括号。
我们得到了最终答案((1,4),(2,3))

给定 n = 8, 返回 "(((1,8),(4,5)),((2,7),(3,6)))".

解释:
第一轮: (1,8),(2,7),(3,6),(4,5)
第二轮: ((1,8),(4,5)),((2,7),(3,6))
第三轮: (((1,8),(4,5)),((2,7),(3,6)))
由于第三轮将产生最终的赢家,您需要输出答案(((1,8),(4,5)),((2,7),(3,6)))。
class Solution {
public:
    /**
     * @param n: a integer, denote the number of teams
     * @return: a string
     */
    string findContestMatch(int n) {
        // write your code here
        vector<string> res;
        for(int i=1;i<=n;i++)
        {
            res.push_back(to_string(i));
        }
        
        while(res.size()>1)
        {
            vector<string> tmp;
            for(int i=0;i<res.size()/2;i++)
            {
                tmp.push_back("("+res[i]+","+res[res.size()-1-i]+")");
            }
            res=tmp;
        }
        return res[0];
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值