求助 od机试

#include <iostream>
using namespace std;
char find(int n, unsigned long long k) {
    if (n == 1) {
        return 'R';
    }
    unsigned long long half = 1ULL << (n - 2);
    if (k < half) {
        char c = find(n - 1, k);
        return (c == 'R') ? 'B' : 'R';
    } else {
        return find(n - 1, k - half);
    }
}
int main() {
    int T;
    cin >> T;
    for (int i = 0; i < T; i++) {
        int n;
        unsigned long long k;
        cin >> n >> k;
        char result = find(n, k);
        cout << ((result == 'R') ? "red" : "blue") << endl;
    }
    return 0;
}

ac率 8.5 实在想不出哪里出了问题, 时间复杂度是o(n), 看着n不大,会是栈溢出的问题吗

全部评论
这不就之前看过一道红黑吗,你把他当成一棵树,r的子节点是br,b的子节点的rb,从最后一层往前一层层遍历,先假设他是b,推根节点是什么,如果正确那他就是b,错误他就是r,复杂度logn
点赞 回复 分享
发布于 04-23 13:56 江苏

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务