B. World Cup

题目链接

Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)--B. World Cup

题解

简单题。题意大概是总共给定n个人,相邻两人之间举行淘汰赛,求指定两人之间如果一直胜利的话是在第几轮比赛相遇。
鉴于数据规模小,可以直接模拟。另一方面如果两个人在第k轮相遇,它们二进制的第k位一定是从大到小数第一个不同的。

代码

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int MAXN = 3005;
const int MOD = 1e9 + 7;
const int inf = 1 << 30;
const ll INF = 1ll << 60;

int n, a, b;
int main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> n >> a >> b;
    a--; b--;
    for (int i = 30; i >= 0; i--) {
        if (((a >> i) & 1) != ((b >> i) & 1)) {
            if ((n >> (i + 1)) == 1) {
                cout << "Final!" << endl;
            }
            else
                cout << i + 1 << endl;
            return 0;
        }
    }
}

标签: implementation

添加新评论