ARC169E 题解

news/2025/2/6 15:42:11/文章来源:https://www.cnblogs.com/include13/p/18701161

本篇题解同步发表于我的 AtCoder 补题记录。

蒟蒻初二时看到晚上有一场 ARC,兴致勃勃地去打了一下,没想到被 A 题硬控,爆零了。

如今,我重新理了一下当时的几个题,觉得这个题特别有意思,写篇题解纪念一下。

这也是我的第一篇黑题题解。

考察知识点

  • 【2】string 类与相关函数
  • 【3】贪心法

本题难度较大,主要考察选手对贪心法的灵活运用,同时也需要选手对 string 类有一定的理解。

判断某一种已排好的状态是否合法

贪心法。

因为不能将两个 $\texttt R$ 配对,所以任何 $\texttt R$ 的数量大于 $\texttt B$ 的字符串都是不合法的。

每一次将第一个人和后面任意一个人匹配,将这两个人从队列内删除,更新队内人的编号。

如果目前的 $1$ 号人帽子为 $\texttt{R}$,需要选取一个 $\texttt{B}$。因为 $\texttt{B}$ 对后面的要求较为宽松(不能都是 $\texttt{R}$,但可以都是 $\texttt{B}$),所以尽量选位置偏后的 $\texttt{B}$。

如果目前有一个 $\texttt B$,应该首先考虑和 $\texttt R$ 配对,配对掉编号最小的 $\texttt R$。

如果没有 $\texttt R$,也从后面开始匹配 $\texttt B$。

求长度为 $2^n$ 的字典序最大的合法字符串

用 $t_n$ 代表长度为 $2^n$ 的字典序最小的合法字符串,规定 $\texttt B\le\texttt R$。

首先定义 $t_0=\texttt R$。但实际上它不会被最终使用。

之后求 $t_i$ 时遍历 $t_{i-1}$,若 $t_{i-1,j}=\texttt R$,就直接新增一个 $\texttt R$,否则新增一个 $\texttt {BR}$。

若新增不够长度,直接在最后增加若干个 $\texttt B$ 即可。

所以 $t_1=\texttt{RB},t_2=\texttt{RBRB},t_3=\texttt{RBRRBRBB}$。以此类推。

如何计算答案

令 $S_i$ 为 $S$ 串中的第 $i$ 个 $\texttt B$ 的位置,$T_i$ 为 $T_n$ 串中第 $i$ 个 $\texttt B$ 的位置。可通过往前移动 $S$ 串中的 $\texttt B$,实现 $S_i\le T_i$。

答案即为 $\sum \max(0,S_i-T_i)$。

扫一遍即可,时间复杂度 $O(2^n)$。

代码

需要对字符串函数的时间复杂度和字符串的下标问题稍微注意一下,不然会 TLE。

#include<bits/stdc++.h>
#define int long long
using namespace std;int n;
string s;
string t;
string t1;	//滚动 t  
int sch[3*114514];
int tch[3*114514];
int ptr1,ptr2;
int include13=0;
signed main(){memset(sch,0x3f,sizeof(sch));memset(tch,0x3f,sizeof(tch));cin>>n;cin>>s;int n1=1<<n;s=' '+s;int a=0,b=0;for(int i=1;i<=n1;i++){a+=(s[i]=='R'),b+=(s[i]=='B');} if(a>b){puts("-1");return 0;}t='R';for(int i=1;i<=n;i++){int n_=1<<i;int t_=t.size();for(int j=0;j<t_;j++){if(t[j]=='R')	t1+="R";else	t1+="BR";}while(t1.size()<n_)	t1+="B";
//		cout<<t1<<endl; t=t1;t1="";
//		while(t1.size())	t1.erase(0,1);} 
//	cout<<endl;
//	return 0;for(int i=1;i<=n1;i++){//枚举 s if(s[i]=='B'){ptr1++;sch[ptr1]=i;
//			cout<<ptr1<<' '<<i<<endl;} }
//	cout<<endl;for(int i=0;i<t.size();i++){if(t[i]=='B'){ptr2++;tch[ptr2]=i+1;
//			cout<<ptr2<<' '<<i+1<<endl;}}
//	cout<<endl;for(int i=1;i<=3e5;i++){include13+=max(0ll,sch[i]-tch[i]);}cout<<include13<<endl;return 0;
}//午睡操场传来蝉的声音 多少年后仍然是很好听  

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

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

相关文章

ThreeJs-13效果合成与后期处理

一.合成效果原理与设置 什么是效果合成,就是可以把一些效果经过后期处理再放出来 原来的物体是直接通过render渲染出来,而现在则是经过一条render通道,可以处理也可以叠加处理后再放出来首先正常加载模型首先导入效果合成器以及一些自带的效果创建合成效果渲染器,跟之前渲染…

解决Windows11可能出现的自动获取到错误的DNS地址问题

现象 当一个wifi再射中中配置了手动的DNS地址,如114.114.114.114/114.114.115.115,连接其他新wifi的时候,虽然默认自动获取DNS,但是获取的却不是路由配发的DNS,而是之前设置的114.114.114.114/114.114.115.115 解决方案 1、首先打开旧ui的网卡的设置,确定处于自动dns。2、…

docker在mac-m1芯片部署并启用tomcat

手把手教你使用docker在mac-m1芯片部署并启用tomcat 1,下载docker并安装 登陆官网下载dockr,选择mi芯片的docker下载 下载地址:https://www.docker.com/get-started 2,配置docker的阿里云加速器(也可以配置其他加速器) 在设置---docker engine 中添加阿里云的加速器 {&quo…

JS-51 事件代理(事件委托)

由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父结点上,由父节点的监听函数统一处理多个子元素的事件。这种方法叫做事件的代理(delegation)var ul =document.querySelector(ul);ul.addEventListenr(click,function(event){if(event.target.tagN…

docker搭建jenkins导入python包

title: docker搭建jenkins导入python包 tags: - docker - centos - jenkins categories: - docker1. 项目概述 2. 环境准备 3. 创建 Dockerfile 4. 创建 Docker Compose YAML 文件 services volumes5. 同级目录放requirements.txt 6. 启动 Jenkins 服务 7. 访问 Jenkins 8. 验…

普通人做短剧需要哪些证书?

短剧行业爆火,但在制作短剧需持有相关资质,否则就属于违规经营。不管是想在各大平台宣传推广,还是想上架小程序等途径都是要求三证齐全的。 那应该先取得什么样的资质才可以开展这项业务? 第一个就是增值电信业务经营许可证—ICP许可证这是从事互联网行业的基本要求,它的申…

DeepSeek如何在资源优化时做到了性能领先?

问题:DeepSeek如何在资源优化时做到了性能领先? DeepSeek V3的Benchmark如图3所示,该图显示DeepSeek V3在主要数据集测试时超越了业界LLM同类标杆的水平,这给了业界一个初步的惊喜,尤其是训练阶段花费了少于业界LLM同类标杆十分之一的代价:图3:DeepSeek V3如何以更少资源…

【ABAP】使用vscode+cline+deepseek进行abap的开发

声明:本文主要进行的是演示,实际项目中的应用还需要大家的探索 前置条件: 1. vscode 安装abap的插件 2. 注册deepseek的api key 或者 硅基流动的 apikey (最近deepseek遭受攻击不太稳定,推荐使用硅基流动的deepseek模型)deepseek api平台硅基流动注册 3. vscode安装clin…

vxe-table 如何实现全部单元格都能拖拽调整列宽,表头和表体都支持拖拽

vxe-table 如何实现全部单元格都能拖拽调整列宽,表头和表体都支持拖拽 官网:https://vxetable.cn 效果代码 通过 resizable-config.isAllColumnDrag 启用所有单元格允许拖拽调整列宽 <template><div><vxe-grid v-bind="gridOptions"></vxe-gr…

初探集群联邦

本文分享自天翼云开发者社区《初探集群联邦》,作者:echooo 一.什么是集群联邦?集群联邦(Federation)是将多个kubenetes集群注册到统一的控制平面,为用户提供统一API入口的多集群解决方案。集群联邦设计的核心是提供在全局层面对应用的描述能力,并将联邦对象实例化为kub…

DeepSeek开源o1击毙OpenAI,强化学习惊现「啊哈」时刻!网友:AGI来了

DeepSeek开源o1击毙OpenAI,强化学习惊现「啊哈」时刻!网友:AGI来了 AI生成摘要摘要 中国版o1刷屏全网。DeepSeek R1成为世界首个能与o1比肩的开源模型,成功秘诀竟是强化学习,不用监督微调。AI大佬们一致认为,这就是AlphaGo时刻。自由讨论详情 一觉醒来,AGI就实现了?!…

多种路径规划方案,满足应用个性化导航需求

在快节奏的都市生活中,路径规划已成为日常出行的核心环节。用户无论前往何地,都期望能够迅速获取所有可能的路线,并根据预估的出行时间,轻松挑选出最适合自己的出行方案。在现代生活中,路径规划的需求无处不在,从导航应用中的个性化路线推荐,到外卖服务中的高效配送规划…