洛谷 P12141:[蓝桥杯 2025 省 A] 红黑树

【题目来源】
https://www.luogu.com.cn/problem/P12141

【题目描述】
小蓝最近学习了红黑树,红黑树是一种特殊的二叉树,树上的结点有两种类型:红色结点和黑色结点。
小蓝在脑海中构造出一棵红黑树,构造方式如下:
1.根结点是一个红色结点;
2.如果当前结点 curNode 是红色结点,那么左子结点 curNode.left 是红色结点,右子结点 curNode.right 是黑色结点;
3.如果当前结点 curNode 是黑色结点,那么左子结点 curNode.left 是黑色结点,右子结点 curNode.right 是红色结点;
此二叉树前几层的形态如下图所示:

小蓝会从树上随机挑选结点,请你帮忙判断他选出的是红色结点还是黑色结点。

【输入格式】
输入的第一行包含一个正整数 m,表示小蓝挑选的结点数。
接下来 m 行,每行包含两个正整数 ni,ki,用一个空格分隔,表示小蓝挑选的结点是第 ni 行(从上往下数)第 ki 个(从左往右数)结点。

【输出格式】
输出 m 行,每行包含一个字符串,依次表示小蓝每次挑选的结点的答案。RED 表示红色结点,BLACK 表示黑色结点。

【输入样例】
2
1 1
2 2

【输出样例】
RED
BLACK

【数据范围】
对于 20% 的评测用例,1≤m≤5,1≤ni≤5;
对于 40% 的评测用例,1≤m≤10,1≤ni≤5;
对于 60% 的评测用例,1≤m≤5,1≤ni≤10;
对于 80% 的评测用例,1≤m≤10,1≤ni≤15;
对于所有评测用例,1≤m≤10,1≤ni≤30,1≤ki≤2^(ni−1)。

【算法分析】
本题与数据结构中的"红黑树"没有半毛钱关系 O(∩_∩)O。
本题就是妥妥一枚找规律题:每行的前半部分就是上一行,每行的前半部分和后半部分对应位的颜色相反。

【算法代码一】

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int st;
int m,n,k;

int main() {
    cin>>m;
    while(m--) {
        cin>>n>>k;
        st=1;
        while(n>1) {
            int t=1<<(n-2);
            if(k>t) {
                if(st) st=0;
                else st=1;
                k-=t;
            }
            n--;
        }
        if(st) cout<<"RED\n";
        else cout<<"BLACK\n";
    }
    return 0;
}

/*
in:
2
1 1
2 2

out:
RED
BLACK
*/

【算法代码二】

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

const int maxn=35;
int st[35]; //stamp
int tot,t;
int m,n,k;

int main() {
    cin>>m;
    while(m--) {
        cin>>n>>k;
        tot=0;
        while(n--) {
            if(k%2==0) st[++tot]=-1;
            if(k%2==1) st[++tot]=1;
            k=(k+1)/2;
        }

        t=1;
        for(int i=tot; i>=1; i--) {
            t=t*st[i];
        }
        if(t==1) cout<<"RED\n";
        else cout<<"BLACK\n";
    }
    return 0;
}

/*
in:
2
1 1
2 2

out:
RED
BLACK
*/

【参考文献】
https://www.luogu.com.cn/problem/solution/P12141
https://blog.csdn.net/2301_80422662/article/details/148299535
https://blog.csdn.net/2302_81646173/article/details/150070550

相关推荐
岑梓铭2 小时前
《考研408数据结构》第六章(6.3 图的遍历)复习笔记
数据结构·笔记·考研··拓扑排序·408
noipp5 小时前
推荐题目:洛谷 P13554 【MX-X15-T1】奶龙龙
c语言·数据结构·c++·算法·编程·洛谷
AI科技星6 小时前
《全域数学·工程应用大典》113–200讲完整总目录
数据结构·人工智能·算法·机器学习·线性回归·乖乖数学·全域数学
米尔的可达鸭8 小时前
深入操作系统 Socket 底层:EPOLLOUT 可写事件管理 + 非阻塞异步
开发语言·网络·数据结构·经验分享·websocket·网络协议
Irissgwe8 小时前
算法之二分查找
数据结构·c++·算法·二分查找
小蒋学算法9 小时前
算法-滑动窗口最大值
数据结构·算法
youtootech18 小时前
HarmonyOS《柚兔学伴》项目实战09-待办列表 UI——List+ForEach+滑动删除
数据结构·ui·华为·list·harmonyos
:-)19 小时前
算法-归并排序
java·开发语言·数据结构·算法·排序算法
兰令水1 天前
hot100【acm版】【2026.7.14打卡-java版本】
java·数据结构·算法·leetcode·面试
cpp_25011 天前
P10098 [ROIR 2023] 地铁建设 (Day 2)
数据结构·c++·算法·贪心·二分答案·洛谷题解