0
点赞
收藏
分享

微信扫一扫

天梯赛 L1-071 前世档案 (c++/二分查找)

单调先生 2022-04-21 阅读 74
算法

       本题可采用二分查找来解答,需要回答n个问题,则结论编号范围为1~2^n,设左边界le=1,右边界ri=2^n,中点mid=(ri+le)/2,当玩家回答为“y”时,将右边界ri更新为mid,当玩家回答为“n”时,将左边界le更新为mid+1。左边界与右边界重合,即le==ri时,玩家恰好回答完n个问题,所得le即为结论编号。

代码如下:

#include<iostream>
#include<cmath>
using namespace std;
int pl[105];
int main() {
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < m; i++) {
        char ch;
        int ri = pow(2, n), le = 1;
        while (le < ri) {
            cin >> ch;
            int mid = (le + ri) / 2;
            if (ch == 'y') {
                ri = mid;
            }
            else {
                le = mid + 1;
            }
        }
        pl[i] = le;
    }
    for (int i = 0; i < m; i++) {
        cout << pl[i] << endl;
    }
    return 0;
}

举报

相关推荐

0 条评论