当前位置: 首页 > news >正文

题解:CF2143E Make Good

简单构造题,但赛时被 D 卡了……

首先显然的是,nnn 为奇数肯定无解,直接特判。

接下来尝试构造出合法序列。一个重要的观察是,如果有两个相邻的相同括号,那么它们可以被同时移动到任意处。

Proof

以两个相邻的左括号为例,只需要进行如下两次操作即可做一次平移:
(()→)))→)((\texttt{(()} \to \texttt{)))} \to \texttt{)((}(()))))((

由于左右括号可以相互变化,因此只需要统计相邻的相同括号总数,设为 cntcntcnt 且默认均变为一种类型的括号。先把它们统一移到一侧,则剩下的括号只会有两种情况:

  1. ()()⋯()\texttt{()()} \cdots \texttt{()}()()()

    cntcntcnt 个括号堆中的 cnt2\frac{cnt}{2}2cnt 个进行翻转即可。由于每次要翻转两个括号,所以 cnt2\frac{cnt}{2}2cnt 得是偶数,也就是 4∣cnt4 \mid cnt4cnt。构造变成 ()()⋯()((⋯(⏟cnt2 个))⋯)⏟cnt2 个\texttt{()()} \cdots \texttt{()} \underbrace{\texttt{((} \cdots \texttt{(}}_{\frac{cnt}{2}\ 个} \underbrace{\texttt{))} \cdots \texttt{)}}_{\frac{cnt}{2}\ 个}()()()2cnt (((2cnt )))

  2. )()()⋯()(\texttt{)()()} \cdots \texttt{()(})()()()(

    此时先要用 444 个括号把它变成 (()()⋯())\texttt{(()()} \cdots \texttt{())}(()()()),然后剩余和 111 情况同理。

代码如下:

void solve ()
{int n = read (),cnt = 0,d = 0;scanf ("%s",str + 1);if (n & 1) {puts ("-1");return;}stack <char> s;for (int i = 1;i <= n;++i){if (!s.empty () && s.top () == str[i]) cnt += 2,s.pop ();else s.push (str[i]);}vector <int> ans;while (!s.empty ()) ans.push_back (s.top ()),s.pop ();if (!ans.empty () && *(--ans.end ()) == ')') {if (!cnt) {puts ("-1");return;}else cnt -= 2,ans.push_back ('('),ans.push_back ('('),++d;}reverse (ans.begin (),ans.end ());if (!ans.empty () && *(--ans.end ()) == '(') {if (!cnt) {puts ("-1");return;}else cnt -= 2,ans.push_back (')'),ans.push_back (')'),--d;}if (d || (cnt & 3)) {puts ("-1");return;}for (auto v : ans) printf ("%c",v);for (int i = 1;i <= cnt / 2;++i) printf ("(");for (int i = 1;i <= cnt / 2;++i) printf (")");puts ("");
}
http://www.dtcms.com/a/391593.html

相关文章:

  • 鸿蒙:使用worker实现多线程通信
  • Spring MVC 常用注解及代码示例
  • 【DMA】DMA入门:外设数据到内存,以串口DMA接收为例,解析底层实现
  • Java 中 super 和 this关键字总结
  • 我的创作纪念日 ----- 第512天
  • 【docker】删除镜像
  • 亚马逊 MWS 关键字 API 实战:关键字搜索商品列表接口深度解析与优化方案
  • 博文干货 | Pulsar 平均负载器(AvgShedder)
  • 【硬件】嘉立创专业版layout流程(一)
  • PyQt6之分组框
  • 深度剖析 IM 单聊与群聊架构设计
  • 农业自动化:技术重塑传统农业的新范式
  • Nginx 日志文件在哪?
  • 小程序开发者转多端应用app调整视频播放功能
  • 九、Java-注解
  • Java学习笔记——AI插件、新建模块、算数运算符类型、隐式转换、强制转换、自增自减运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符
  • 【从零开始刷力扣006】leetcode206
  • FreeRTOS——介绍及移植过程
  • Day 07 Physics list-----以B1为例
  • 重读一次IS015765-2,记录对错误和异常处理的方式
  • Edge浏览器CSDN文章编辑时一按shift就乱了(Edge shift键)欧路翻译问题(按Shift翻译鼠标所在段落)
  • SpringIoc 基础练习 验证码
  • 前端项目,CDN预热有什么用?
  • TF卡的存储数据结构—fat32格式
  • led的带宽在模拟太阳光中设备中的影响
  • go资深之路笔记(三) sync.WaitGroup, sync.errgroup和 sync.go-multierror
  • Docker 与数据库环境
  • Node.js 模块系统详解
  • proxy代理应用记录
  • 基于python大数据的汽车数据分析系统设计与实现