题目链接

前言

是的没脑子选手只会做签到题。

思路分析

一开始把题目看成反转括号的状态,直接浪费 \(40\ mins\) 。

我们考虑把不确定的“正确括号”转换成一个固定的括号序。

能让我想到的只有 ()()()...(((...))) 这两种可能。

对着 ()()()... 看了一天,我没有任何思路。(可能是我没脑子)

直接考虑 (((...))) 的情况。

发现只要找到一个 ) 且它的前面全部匹配,那么随便拉一个它右边的 ( 给它就好了。

至于中间部分的混乱,当处理到它时自然就好了。

于是可以编出 \(O(n)\) 找 ( 和 \(O(n)\) 翻转的 \(O(n^2)\) 做法,可以得到 \(50\ pts\) 的高分。

其实只要对着括号序列观察一下就可以发现:

我们只需要找到当前 ) 的右边的第一个 ( 即可。

这很显然,因为此时 )( 之间全部都是 ),所以所谓的翻转不过是两个数调一下位置。

所以 \(O(n)\) 扫一遍即可。

于是没脑子选手成功得到了 20 pts 的好成绩。

细节比较坑人(至少我是这么认为的)…… 具体看代码吧。

Code

#include <bits/stdc++.h>

#define file(a) freopen(a".in", "r", stdin), freopen(a".out", "w", stdout)

#define quad putchar(' ')
#define Enter putchar('\n') const int N = 200005; using std::pair;
using std::make_pair; int n, len, nows = 0, a[N];
char c[N]; std::vector <pair <int, int> > ans; signed main(void) {
// file("#31");
scanf("%s", c + 1);
n = strlen(c + 1);
int pos = 1;
for (int i = 1; i <= n; i++) {
if (c[i] == '(') continue;
pos = std::max(pos, i);
while (c[pos] != '(' && pos <= n) pos++;
if (pos > n) break;
ans.push_back(make_pair(i, pos));
pos ++;
}
printf("%d\n", ans.size());
for (auto now : ans)
printf("%d %d\n", now.first, now.second);
}

【UR #2】猪猪侠再战括号序列 题解的更多相关文章

  1. uoj #31. 【UR #2】猪猪侠再战括号序列 贪心

    #31. [UR #2]猪猪侠再战括号序列 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/31 Descript ...

  2. 学长小清新题表之UOJ 31.猪猪侠再战括号序列

    学长小清新题表之UOJ 31.猪猪侠再战括号序列 题目描述 大家好我是来自百度贴吧的_叫我猪猪侠,英文名叫\(\_CallMeGGBond\). 我不曾上过大学,但这不影响我对离散数学.复杂性分析等领 ...

  3. UOJ#31 【UR #2】猪猪侠再战括号序列

    传送门http://uoj.ac/problem/31 大家好我是来自百度贴吧的_叫我猪猪侠,英文名叫_CallMeGGBond. 我不曾上过大学,但这不影响我对离散数学.复杂性分析等领域的兴趣:尤其 ...

  4. 【UR #2】猪猪侠再战括号序列

    UOJ小清新题表 题目摘要 UOJ链接 有一个由 \(n\) 个左括号 "(" 和 \(n\) 个右括号 ")" 组成的序列.每次操作时可以选定两个数 \(l, ...

  5. uoj problem 31 猪猪侠再战括号序列

    题目大意: 给定一个长度为2n的括号序列.定义一个关于区间[l,r]的翻转操作为位置平移对调. 即翻转")))()("可以得到"()()))((" 用不超过n次 ...

  6. 【UOJ】【UR #2】猪猪侠再战括号序列(splay/贪心)

    http://uoj.ac/problem/31 纪念伟大的没有调出来的splay... 竟然那个find那里写错了!!!!!!!!!!!!! 以后要记住:一定要好好想过! (正解的话我就不写了,太简 ...

  7. 【区间DP】codevs3657 括号序列题解

    题目描述 Description 我们用以下规则定义一个合法的括号序列: (1)空序列是合法的 (2)假如S是一个合法的序列,则 (S) 和[S]都是合法的 (3)假如A 和 B 都是合法的,那么AB ...

  8. 【BZOJ2329/2209】[HNOI2011]括号修复/[Jsoi2011]括号序列 Splay

    [BZOJ2329/2209][HNOI2011]括号修复/[Jsoi2011]括号序列 题解:我们的Splay每个节点维护如下东西:左边有多少多余的右括号,右边有多少多余的左括号,同时为了反转操作, ...

  9. P1241 括号序列

    P1241 括号序列 题解 谁解释下标签递推是个什么鬼,应该是暴力 数据比较小直接跑暴力 但是注意题目描述 也就是说: [ ( ] ) 是不合法的 补全应该是 [ ] ( [ ] ) 举个栗子: 比如 ...

随机推荐

  1. JS的URIencode方式

    BEGIN; 对需要传递的URL参数进行URLencode编码 刚开始浪费了很多时间都没搞出来,不知道怎么用.后面google到了不少解决方案,最终解决.转载下面内容: js对文字进行编码涉及3个函数 ...

  2. Go通过cobra快速构建命令行应用

    来自jetbrains Go 语言现状调查报告 显示:在go开发者中使用go开发实用小程序的比例为31%仅次于web,go得益于跨平台.无依赖的特性,用来编写命令行或系统管理这类小程序非常不错. 本文 ...

  3. Day 004:PAT练习--1033 旧键盘打字 (20 分)

    题目要求如下:   我一开始理解的题意:第一行给出的是坏掉的键,这里的规则应该是这样的:   1."对应英文字母的坏键以大写给出",若有字母,则与其相关的字母全部不能输出,不论是大 ...

  4. python学习-Day32

    目录 今日内容详细 软件开发架构 概念 软件开发架构的分类 C/S架构 B/S架构 两种架构的优缺点 C/S架构: B/S架构: tip 网络编程 概念 互联网 互联网协议 OSI七层协议简介 专业设 ...

  5. 攻防世界-MISC:pdf

    这是攻防世界新手练习区的第二题,题目如下: 点击附件1下载,打开后发现是一个pdf文件,里面只有一张图片 用WPS打开,没发现有什么不对的地方,参考一下WP,说是要转为word格式.随便找一个在线转换 ...

  6. XCTF练习题---MISC---intoU

    XCTF练习题---MISC---intoU flag:RCTF{bmp_file_in_wav} 解题步骤: 1.观察题目,下载附件 2.解压以后是一个音频文件,听一听,挺嗨的,一边听一边想到音频分 ...

  7. vue 排错

    error The template root requires exactly one element vue/no-multiple-template-root ... 解决办法: .eslint ...

  8. 团队Arpha6

    队名:观光队 链接 组长博客 作业博客 组员实践情况 黄恒杰 - **过去两天完成了哪些任务 ** - 文字/口头描述 地图功能增加.博客 - 展示GitHub当日代码/文档签入记录 - 接下来的计划 ...

  9. [python][flask] Flask 入门(以一个博客后台为例)

    目录 1.安装 1.1 创建虚拟环境 1.2 进入虚拟环境 1.3 安装 flask 2.上手 2.1 最小 Demo 2.2 基本知识 3.解构官网指导 Demo 3.1 克隆与代码架构分析 3.2 ...

  10. docker 灵活的构建 php 环境

    地址: https://github.com/ydtg1993/server           使用docker搭建灵活的线上php环境 有时候你可能不太需要一些别人已经集成了的包或者镜像      ...