zoukankan      html  css  js  c++  java
  • [hankerrank]Counter game

    https://www.hackerrank.com/contests/w8/challenges/counter-game

    关键是二分查找等于或最接近的小于target的数。可以使用和mid+1判断来比较~ 另有一种做法如下:

    http://stackoverflow.com/questions/6553970/find-the-first-element-in-an-array-that-is-greater-than-the-target

    #include <iostream>
    #include <vector>
    using namespace std;
    
    uint64_t nextN(uint64_t N, vector<uint64_t> &vec) {
        int left = 0;
        int right = vec.size() - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (vec[mid] == N) {
                return N / 2;
            } else if (vec[mid] > N) {
               right = mid - 1; 
            } else {
               if (N < vec[mid + 1]) {
                   return (N - vec[mid]);
               }
               left = mid + 1;
            }
        }
        return (N - vec[(left + right) / 2]);
    }
    
    int main() {
        int T;
        cin >> T;
        vector<uint64_t> vec;
        uint64_t p = 1;
        for (int i = 0; i < 64; i++) {
            vec.push_back(p);
            p *= 2;
        }
        while (T--) {
            uint64_t N;
            cin >> N;
            int move = 0;
            while (N != 1) {
                move++;
                N = nextN(N, vec);
            }
            if (move % 2 == 0) {
                cout << "Richard" << endl;
            } else {
                cout << "Louise" << endl;
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    第4章.计算节点
    Eclipse插件ViPlugin2.X的破解方法
    金刚经
    js
    C++ 重写重载重定义区别
    string::substr()简介
    信息熵与二进制
    一个简单的条件概率问题
    HPLINUX hplinux 安装升级 至 jdk1.8
    linux 解压命令
  • 原文地址:https://www.cnblogs.com/lautsie/p/3904435.html
Copyright © 2011-2022 走看看