RocksonLee's Blog
avatar
RocksonLee
2022-03-16 19:49:21

Problem

luogu

codeforces

Solution

problem

首先,上手看图可以知道,在后面的两层,Winner的二进制表达都是 1 。

再看一下 1 \leq n \leq 30 所以我们就可以知道怎么做了。

那来看看这道题的标准些的解释,在第一层,即 1 与 2 相加,3 与 4 相加

那么就是选择小一点的数,即 1 和 3 ,5 ,7 之类的,可以看出来,第二层开始全都是奇数。

那么下面的每每两个数都是选择两个之间最大的那一个,直到第 n 层的Winner。

当层数为 n 时,我们按照第二层往后的两两最大的规律往前推到第一层,那么第 n 层的Winner应该来自第一层的最下面的一组

Winner 2^n-1 vs Winner 2^n

如果 x+y 时是奇数,那么小一点的数是 Winner

即 答案是 2^n-1

Code

#include <bits/stdc++.h>
using namespace std;

#define il inline
#define INF 0x3f3f3f3f
#define cl(a, b) memset(a, b, sizeof(a))
typedef long long ll;
typedef unsigned long long ull;

int t, x;
int main()
{
    scanf("%d", &t);
    for (int kkz = 0; kkz < t; kkz++)
    {
        scanf("%d", &x);
        printf("%d\n", (int)pow(2, x) - 1);
    }
    return 0;
}
CF 1651A Playoff
comment评论
Search
search