CF1551B2 Wonderful Coloring - 2 题解

本篇博客详细介绍了CF1551B2问题的解决方案,通过桶排序和利用vector存储颜色下标,解决当序列元素数量大于等于k时的染色问题。在遍历桶和处理剩余元素时,遵循特定的k倍数规则,确保满足题目条件。最后给出代码实现。
摘要由CSDN通过智能技术生成

本题我们首先用桶扫一遍序列,由于需要存出下标,所以我们把桶定义成vector形式。接下来扫一遍桶。由于方便,我们将每种颜料所涂的下标用vector来存

  • 若桶中数字数量>=k,则将所有k个容器都加入一个,剩下来的就没办法了
  • 若<k,则先把其暂存在另一个序列里,我们称之为“暂存序列”,长度为cnt

扫完我们遍历暂存序列,但是由于要满足每一种颜色染的字母的数量全部相等的条件,所以我们可以只遍历到cnt-cnt%k,感性理解就是最后一个不大于cnt且是k倍数的数。这样我们就依次放入容器就行了,我们就一个一个按顺序放,即为i%k+1。

暂存序列搞定之后,剩下的就是把所有容器存的数下标取出来,把结果数组的相应位置赋上答案即可。

代码实现:

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>

using namespace std;

const int MAXN = 2e5 + 100;
int T, n, k, a[MAXN], b[MAXN], cnt, p[MAXN], vis[MAXN];
vector<int> bucket[MAXN], vec[MAXN];

int main() {
   
    scanf("%d", &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值