寿司

news/2024/7/4 0:11:20/文章来源:https://www.cnblogs.com/ppllxx-9G/p/18272251

寿司

题目描述

解析

合法的结果只有两种情况:\(B\) 都在两边、\(R\) 都在两边,至于是最左边还是最右边或者都有,无所谓,因为是环。

而每个 \(B\) 移到最左边的代价就是它左边 \(R\) 的个数,移到最右边就是它右边 \(R\) 的个数。

按环形 dp 的套路,我们可以把串复制二倍,然后枚举断点,破环成链,然后对于每个链把 \(B\) 移到区间两边。

因为我们已经遍历每一个断点,所以不用考虑 \(R\) 在断点处的情况,只用考虑 \(B\)

这是暴力版的 \(O(n^2)\)

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+5;
int t,n,_1[N],_0[N];
string s;
int main()
{freopen("sushi.in","r",stdin);freopen("sushi.out","w",stdout);scanf("%d",&t);while(t--){cin>>s; int n=s.length();s=' '+s+s;for(int i=1;i<=n<<1;i++){_1[i]=_1[i-1]+(s[i]=='B');_0[i]=_0[i-1]+(s[i]=='R');}long long ans=1e18;for(int l=1,r=n;r<=n<<1;l++,r++){long long res=0;for(int i=l;i<=r;i++){if(s[i]=='B')res+=min(_0[i]-_0[l-1],_0[r]-_0[i]);}ans=min(ans,res);}printf("%lld\n",ans);}return 0;
}

然后我们考虑优化,每一个序列一定存在一个位置,它左边的 \(B\) 一定移到最左边最优,右边的 \(B\) 一定移到右边最优。

并且随着我们的区间右移的过程中,这个位置一定是单调的(易证),所以我们可以单调指针指一下。

这对我们优化有什么帮助呢?我们还是先写出暴力:

for(int l=1,r=n;r<=n<<1;l++,r++) 
{long long res=0;while(_0[tag]-_0[l-1]<_0[r]-_0[tag]) tag++;for(int i=l;i<=tag;i++) if(s[i]=='B') res+=_0[i]-_0[l-1];for(int i=tag+1;i<=r;i++) if(s[i]=='B') res+=_0[r]-_0[i];ans=min(ans,res);
}

我们发现可以前缀和维护一下!

然后做完了。

code
#include<bits/stdc++.h>
using namespace std;
const int N = 2e6+5;
int t,n,_1[N],_0[N];
long long sum[N];
char s[N];
int main()
{freopen("sushi.in","r",stdin);freopen("sushi.out","w",stdout);scanf("%d",&t);while(t--){scanf("%s",s+1); n=strlen(s+1);for(int i=1;i<=n;i++) s[i+n]=s[i];for(int i=1;i<=n<<1;i++){_1[i]=_1[i-1]+(s[i]=='B');_0[i]=_0[i-1]+(s[i]=='R');if(s[i]=='B') sum[i]=sum[i-1]+_0[i];else sum[i]=sum[i-1];}long long ans=1e18; int tag=1;for(int l=1,r=n;r<=n<<1;l++,r++) {long long res=0;while(_0[tag]-_0[l-1]<_0[r]-_0[tag]) tag++;res+=sum[tag]-sum[l-1]-(long long)_0[l-1]*(_1[tag]-_1[l-1]);res+=(long long)(_1[r]-_1[tag])*_0[r]-sum[r]+sum[tag];ans=min(ans,res);}printf("%lld\n",ans);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/732450.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(一)ChatGPT 背后的“功臣”——RLHF 技术详解

ChatGPT 背后的“功臣”——RLHF 技术详解 OpenAI 推出的 ChatGPT 对话模型掀起了新的 AI 热潮,它面对多种多样的问题对答如流,似乎已经打破了机器和人的边界。这一工作的背后是大型语言模型 (Large Language Model,LLM) 生成领域的新训练范式:RLHF (Reinforcement Learnin…

Jetpack Compose(8)——嵌套滚动

目录前言一、Jetpack Compose 中处理嵌套滚动的思想二、Modifier.nestedScroll2.1 NestedScrollConnection2.2 NestedScrollDispatcher三、实操讲解3.1 父组件消费子组件给过来的事件——NestedScrollConnection3.2 子组件对事件进行分发——NestedScrollDispatcher3.2 按照分发…

Unity Address Asset System:Assembly-CSharp - 可用Assembly-CSharp.Player - 不可用

在使用Unity的Addressables插件进行游戏资源分包管理的时候,报了这个错误: 反编译查看发现是unity与.net版本不匹配导致的问题 解决方案: 在Unity中打开Edit->Project Settings->Player,更改.Net版本 微软官方文档: 在 Unity 中使用 .NET 4 和更高版本 | Microsoft …

CC2分析与利用

CC2分析与利用 环境配置 一、 CC2 需要使用commons-collections-4.0版本,因为3.1-3.2.1版本中TransformingComparator没有实现Serializable接口,不能被序列化,所以CC2不用3.x版本。还需要 javassist 依赖,利用链2需要。 pom.xml 添加:<dependency><groupId>or…

【计算机网络】TCP连接三次握手和四次挥手

三次握手建立连接 TCP(传输控制协议)的三次握手机制是一种用于在两个 TCP 主机之间建立一个可靠的连接的过程。这个机制确保了两端的通信是同步的,并且在数据传输开始前,双方都准备好了进行通信。①、第一次握手:SYN(最开始都是 CLOSE,之后服务器进入 LISTEN)发起连接:…

原型设计

原型设计的重要性 网页原型显示了网页的骨架结构,因此可以更好地了解用户将去哪里以及如何导航,通过视觉方式表达产品的要求。 网页原型还有助于交流想法和规划网页,提高团队沟通的效率和质量,进行高效协作。 设计团队与客户沟通变得容易,能够有效地减少了返工和误解,降低…

weblogic 漏洞复现

1.环境地址信息http://192.168.116.112:7001/console/ 2.使用漏洞检测工具,检测对应漏洞 选中对应漏洞检查,发现存在对应漏洞 3.漏洞利用 命令执行 内存马上传使用冰蝎连接 连接成功

详细解析ORB-SLAM3的源码

随着计算机视觉和机器人技术的发展,SLAM(同步定位与地图构建)技术在自动导航、机器人和无人机等领域中起着至关重要的作用。作为当前最先进的SLAM系统之一,ORB-SLAM3因其卓越的性能和开源特性,备受关注。本文将详细解析ORB-SLAM3的源码 ,帮助读者更好地理解其内部机制。 …

H3C之IRF典型配置举例(BFD MAD检测方式)

IRF典型配置举例(BFD MAD检测方式) 1、组网需求由于网络规模迅速扩大,当前中心设备(Device A)安全业务处理能力已经不能满足需求,现在需要另增一台设备Device B,将这两台设备组成一个IRF(如图所示),并配置BFD MAD进行分裂检测。2、组网图 IRF典型配置组网图(BFD MAD…

【攻防技术系列+反溯源】入侵痕迹清理

#溯源 #入侵痕迹清理 #攻防演练 在授权攻防演练中,攻击结束后,如何不留痕迹的清除日志和操作记录,以掩盖入侵踪迹,这其实是一个细致的技术活。 在蓝队的溯源中,攻击者的攻击路径都将记录在日志中,所遗留的工具也会被蓝队进行分析,在工具中可以查找特征,红队自研工具更容…

ProfibusDP主站转Modbus模块连接综合保护装置配置案例

常见的协议有Modbus协议,ModbusTCP协议,Profinet协议,Profibus协议,Profibus DP协议,EtherCAT协议,EtherNET协议等。本案例描述了如何使用ProfibusDP主站转Modbus模块(XD-MDPBM20)来连接综合保护装置(综保),实现数据交换和远程控制。通过配置ProfibusDP主站和Modbus…

HL集训日记(更新ing)

Day -inf 听说又要去海亮,感到恐慌,想起了被xxs碾压的日子,遂卷; Day -1 与学校说再见 Day 0 去机场,这次倒是没有人迟到力; 下大雨,冷,明明天气预报上气温是比DL热的,却这么冷!!! 到了HL,这回住进了24小时摆烂中心(确信,空调吹得好难受,,, gg并没有收手机,…

【计算机网络】TCP如何保证稳定性

连接管理 校验和 序列号/确认应答 流量控制 最大消息长度 超时重传 拥塞控制资料来源连接管理 TCP 使用三次握手和四次挥手保证可靠地建立连接和释放连接。 校验和 TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果接收端…

数据分析 | 数据清理的方法

数据清理的步骤# 一、读取数据 导入NumPy和Pandas数据库,用Pandas的read_csv函数读取原始数据集’e_commerce.csv’,使其转换成DataFrame格式,并赋值给变量df。 展示数据集的前5行和后5行。# 二、评估数据(整洁度、干净度) 创建一个新的变量cleaned_data = df(相当于复制…

iMovie视频剪辑入门

iMovie学习笔记自己不是摄影爱好者📹(也许以后是,说不准),想学视频剪辑的原因如下:大一的一些小组作业有拍视频的任务,有时需要我承担剪辑的工作。因为不熟练,只能用剪映瞎折腾,浪费不少时间。系统地学习可以让我更好地完成剪辑工作。 想了解iMovie本身。本文是我的i…

域渗透之CSMSF联动权限传递

cs与msf会话的相互派生,记个笔记以免忘记具体的操作。cs派生给msf环境:msf6 + cs4.8条件:目标已上线cs,获得控制权1)在msf上启用reverse_http模块监听本地端口: use exploit/multi/handler set payload windows/meterpreter/reverse_http set lhost 192.168.88.128 set l…

免费可视化工具能为我们的工作带来什么好处?

免费可视化工具能为我们的工作带来什么好处?在如今数据密集的工作环境中,如何高效地处理和展示数据成为了每个行业的重要任务。传统的工具如Excel虽然强大,但在处理复杂数据和创建高级图表时往往显得力不从心。而免费可视化工具的出现,彻底改变了这一局面,不仅大大提升了工…

MCU点灯实验小结

设备采用芯片:STM32F407ZET6 4个LED灯,网络标号分别为LED0 ,LED1,FSMC D10,FSMC D11。对应的引脚号分别为PF9,PF10,PE12,PE13。 GPIO外设基本概念 General-Purpose Input Output,通用型输入输出的,也简称I/O口,有时也简写为IO口。用于电信号的传递,以实现与外部器件的通信…

南昌航空大学-23201406-耿乐-第三次OOP博客作业

对于最后两次题目集中的题目和做题情况的总结,包括电路模拟程序3和4。 一、前言总结两次题目集的题目情况关于题目集 最后两次题目集中都只有一道题目,是电路模拟程序的系列迭代,没有额外的题目。 题目本身 第七次题目集中的电路模拟3并不是太难,只要理清题目中的要求和电路…

记录c#开发Windows服务的过程

1.新建Windows服务项目 2.重命名Service1.cs 3.添加安装程序 4.修改service,修改信息如下:备注:ServiceName和安装后的服务名保持一致哦!!!5.修改serviceProcessInstaller1 6.编辑TransService代码 7.添加新项目窗体应用程序 代码:1 using System;2 using System.Win…