首页 > 其他分享 >[Codeforces] CF1659B Bit Flipping

[Codeforces] CF1659B Bit Flipping

时间:2023-12-02 19:23:30浏览次数:48  
标签:CF1659B int Flipping 每次 Codeforces 操作 Bit now 翻转

题面

给定一个长为 \(n\) 的 01 串,你可以进行 \(k\) 次操作。每次操作中,你可以选择任意一位,并将除了这一位以外的其它位翻转(\(1\) 变 \(0\),\(0\) 变 \(1\)),输出 \(k\) 次操作后能获得的字典序最大的字符串,并输出每一位在操作中被选择的次数。若有多解输出任意一解。

思路

可以发现,操作的从次数对于每个位置被操作的次数都有影响。

  • 如果\(k\)是奇数,那么每个位置都会被翻过奇数次,也就是\(1\)次

  • 如果\(k\)是偶数,那么每个位置就不会被翻转

所以对应的如果\(k\)是奇数的,那每次保护的(即不会被翻转的)应该是\(0\)

反之,如果\(k\)是偶数,那么每次就保护\(1\)

可以发现,如果想要字典序最大,所保护的\(0\)或\(1\)都应该尽量靠前

当所有的都被操作后,剩余的操作就都放在最后一位即可

被保护:即每次翻转时,需要选择一个的位置,使其不变

代码

#include<bits/stdc++.h>
using namespace std;
const int Maxn=2e5+10;
int n,k,now;
string s;
int ans[Maxn];
void run()
{
	cin>>n>>k>>s;now=k;memset(ans,0,(n+1)*4);
	for(int i=1;i<n && now;i++)
	{
		if(s[i-1]=='1' && k%2==1) ans[i]++,now--;
		else if(s[i-1]=='0' && k%2==0) ans[i]++,now--;
	}
	ans[n]+=now;
	for(int i=1;i<=n;i++) if((k-ans[i])%2==1) s[i-1]=(s[i-1]=='0'?'1':'0');
	cout<<s<<endl;
	for(int i=1;i<=n;i++) cout<<ans[i]<<" ";
	cout<<endl;
}
int main()
{
	int t;
	cin>>t;
	while(t--) run();
} 

标签:CF1659B,int,Flipping,每次,Codeforces,操作,Bit,now,翻转
From: https://www.cnblogs.com/lyk2010/p/17872075.html

相关文章

  • [Codeforces] CF1675D Vertical Paths
    题目描述给定一棵由\(n\)个顶点组成的有根树。顶点由\(1\)到\(n\)编号。任何顶点都可以是树的根。请在树上找出这样一组路径:每个顶点恰好属于一条路径,每条路径可以包含一个或多个顶点;在每条路径中,每个节点的下一个节点是当前节点的子节点(即路径总是向下——从父节点......
  • A. Flipping Game
    A.FlippingGame本质上是让我们找出一段区间内\(0\)的个数大于\(1\)的个数的最多的区间,且必须进行一次操作,所以可以考虑区间\(dp\),或者最小子序列和1最小子序列和\[\begin{aligned}dp_i是以a_i结尾的最小子序列和\\dp_i=\min(dp_{i-1}+a[i],a[i])\end{aligned}\]#inc......
  • rabbitmq的推(push)拉(pull)模式介绍及代码实现
    在rabbitmq中有两种消息处理的模式,一种是推模式/订阅模式/投递模式(也叫push模式),消费者调用channel.basicConsume方法订阅队列后,由RabbitMQ主动将消息推送给订阅队列的消费者;另一种是拉模式/检索模式(也叫pull模式),需要消费者调用channel.basicGet方法,主动从指定队列中拉取消息。推......
  • RabbitMQ work模型
    默认情况下,MQ队列如果绑定了多个消费者,那么队列在投递消息时就是轮询,一人投递一个(并且一条消息只能投递给监听该队列的某一个消费者)在一个MQ队列上绑定多个消费者的目的是加快队列中消息的处理效率,防止队列中消息的堆积问题。 注:要在消费者的application.yml文件中加上这个......
  • RabbitMQ 接收队列的消息
     代码示例:注:要把这个类加上Component注解packagecom.itheima.amqp_listener;importorg.springframework.amqp.rabbit.annotation.RabbitListener;importorg.springframework.stereotype.Component;@ComponentpublicclassMQListener{@RabbitListener(queues="simpl......
  • RabbitMQ 发送消息到队列(交换机不参与的那种)
    1.导包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>2.在application.yml文件里编写配置信息spring:rabbitmq:host:192.168.88.130port:5672......
  • Codeforces Round 912 (Div. 2) E - Geo Game
    考虑什么时候会改变答案的奇偶,显然可以根据\(x\oplusy\)的奇偶性分组,在组内进行跳跃不会改变,只有当组间跳跃的时候才会改变。打表观察先手什么时候必胜,其中:\(u\)是当前获胜目标为奇/偶(1/0),\(v\)是位于哪一组,\(a,b\)代表两组还剩多少,\(st\)代表当前答案的奇偶性。intdfs(intu,......
  • 【ErikTse】2023-Codeforces新手训练营 第六期题解
    A.Wrath题目大意给你一个\(L\)数组和\(n\)个人,第\(i\)个人可以使用威力为\(L_i\)的闪电旋风劈击杀前面\(L_i\)人,问你最后能存活多少人?思路差分。开一个数组来标记当前威力的闪电旋风劈能击杀到的最远的人和使用技能的人,最远击杀的人所在的位置+1,自己的位置-1,这样算前缀和时所......
  • Codeforces Round 912 (Div. 2)
    CodeforcesRound912(Div.2)基本概述最难受的一集。A题秒了。B题幸苦推了两个小时,最后也通过了pretest了,结果赛后被HACK。C题知道是DP,但觉得不好推状态转移方程,所以全心全意去做B题了。爆掉\(150\)分B.StORageroom我的思路其实就几乎是答案。之前几乎没怎......
  • [Codeforces] CF1591C Minimize Distance
    CF1591CMinimizeDistance题目一条线上有\(n\)(\(1\len\le2\cdot10^5\))个仓库,第\(i\)个仓库的位置是\(x_i\)(\(1\lei\len\))。你有\(n\)箱货物,要分别运到这\(n\)个仓库里。你的初始位置在点\(0\),一次可以携带\(k\)(\(1\lek\len\))箱货物。在送完携带......