学长小清新题表之UOJ 31.猪猪侠再战括号序列
学长小清新题表之UOJ 31.猪猪侠再战括号序列
题目描述
大家好我是来自百度贴吧的_叫我猪猪侠,英文名叫\(\_CallMeGGBond\)。
我不曾上过大学,但这不影响我对离散数学、复杂性分析等领域的兴趣;尤其是括号序列理论,一度令我沉浸其中,无法自拔。至于\(OI\)算法竞赛,我年轻时确有参加,虽仅获一枚铜牌,但我素性淡泊,毫不在意,毕竟那所谓\(FFT\)、仙人掌之类,只是些雕虫小技罢了,登不上大雅之堂的;只有括号序列才会真正激发我的研究热情。
我曾天真地以为,凭借我的学识与才能,足可以在这世间安身立命;然而直到沦落街头后,我终才领悟现实的残酷。迫于生计,我只得转向道德与哲学的研究;但我与括号序列之间情愫依旧,难以剪断。
理性的传播总是不顺的,研究的道路也是曲折的,但轻易放弃决不是我的风格;为了继续实现自己的理想,现在我向大家提出一道括号序列的超级大难题。
有一个由 \(n\)个左括号 “(” 和 n 个右括号 “)” 组成的序列。每次操作时可以选定两个数 \(l,r\),然后把第 $l $到第 \(r\) 个括号的顺序翻转(括号的朝向保持不变)。例如将 “()((()(” 翻转第 \(3\) 到第 \(7\)个括号后的结果为 “()()(((”。
我希望使用不超过\(n\)次操作,将这个序列变为一个合法的括号序列。
众所周知,合法括号序列的定义如下:
\(()\) 是合法括号序列;
如果 \(A\) 是合法括号序列,则 \((A)\)是合法括号序列;
如果 $A,B \(是合法括号序列,则\) AB $是合法括号序列。
自从来到 $UOJ $这个宝地,我的视野变得开阔了,也见识了更多富有人类智慧的人士。我相信各位一定能给我更加满意的答案!
输入格式
一行一个长度为 \(2n\)的非空字符串表示初始序列。保证字符串只包含左括号和右括号,且左右括号的个数均为 \(n\)。
输出格式
对于给出的字符串,输出调整成合法的括号序列的方案。如果不存在这样的方案输出一行一个整数 \(−1\)。
否则,第一行一个整数 \(m\)表示要进行 \(m\)次翻转操作。
接下来 \(m\)行每行两个整数 \(l\),\(r\) 表示要翻转区间 \([l,r]\)
内的括号顺序。翻转操作会按你输出的顺序执行。
请保证 \(m≤n\),以及 \(1≤l≤r≤2n\),否则会被判 \(0\)分。
如果有多组方案,输出任意一组即可。
样例一
input
)))()(((
output
2
1 6
5 8
explanation
第一次操作后序列变为 “()()))((”。
第二次操作后序列变为 “()()(())”。
限制与约定
| 测试点编号 | n的规模 |
|---|---|
| 1 | \(n≤4\) |
| 2、3、4、5 | \(n≤100\) |
| 6、7、8、9、10 | \(n≤100000\) |
时间限制:\(1s\)
空间限制:\(256MB\)
分析
我们从左到右扫一遍序列,如果是左括号,就把总价值加一,否则就减一
如果当前的总价值变为负数,我们用头指针记录一下当前的位置,同时尾指针一直向后扫
当价值恰好变为\(0\)时,停止扫描,将头、尾指针所形成的序列反转
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int jlx[maxn],jly[maxn];
char s[maxn];
int main() {
scanf("%s",s+1);
int len=strlen(s+1);
int m=0,cnt=0;
for(int i=1;i<=len;i++){
if(s[i]=='(') cnt++;
else cnt--;
if(cnt<0){
jlx[++m]=i;
while(cnt!=0){
i++;
if(s[i]=='(') cnt+=1;
else cnt+=-1;
}
cnt=0;
jly[m]=i;
}
}
printf("%d\n",m);
for(int i=1;i<=m;i++){
printf("%d %d\n",jlx[i],jly[i]);
}
return 0;
}
学长小清新题表之UOJ 31.猪猪侠再战括号序列的更多相关文章
- 学长小清新题表之UOJ 14.DZY Loves Graph
学长小清新题表之UOJ 14.DZY Loves Graph 题目描述 \(DZY\)开始有 \(n\) 个点,现在他对这 \(n\) 个点进行了 \(m\) 次操作,对于第 \(i\) 个操作(从 ...
- 学长小清新题表之UOJ 180.实验室外的攻防战
学长小清新题表之UOJ 180.实验室外的攻防战 题目描述 时针指向午夜十二点,约定的日子--\(2\)月\(28\)日终于到来了.随着一声枪响,伏特跳蚤国王率领着他的跳蚤大军们包围了 \(picks ...
- uoj problem 31 猪猪侠再战括号序列
题目大意: 给定一个长度为2n的括号序列.定义一个关于区间[l,r]的翻转操作为位置平移对调. 即翻转")))()("可以得到"()()))((" 用不超过n次 ...
- uoj #31. 【UR #2】猪猪侠再战括号序列 贪心
#31. [UR #2]猪猪侠再战括号序列 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/31 Descript ...
- UOJ#31 【UR #2】猪猪侠再战括号序列
传送门http://uoj.ac/problem/31 大家好我是来自百度贴吧的_叫我猪猪侠,英文名叫_CallMeGGBond. 我不曾上过大学,但这不影响我对离散数学.复杂性分析等领域的兴趣:尤其 ...
- 【UOJ】【UR #2】猪猪侠再战括号序列(splay/贪心)
http://uoj.ac/problem/31 纪念伟大的没有调出来的splay... 竟然那个find那里写错了!!!!!!!!!!!!! 以后要记住:一定要好好想过! (正解的话我就不写了,太简 ...
- 【Luogu3676】小清新数据结构题(动态点分治)
[Luogu3676]小清新数据结构题(动态点分治) 题面 洛谷 题解 先扯远点,这题我第一次看的时候觉得是一个树链剖分+线段树维护. 做法大概是这样: 我们先以任意一个点为根,把当前点看成是一棵有根 ...
- 思维题练习专场-DP篇(附题表)
转载请注明原文地址http://www.cnblogs.com/LadyLex/p/8536399.html 听说今年省选很可怕?刷题刷题刷题 省选已经结束了但是我们要继续刷题刷题刷题 目标是“有思维 ...
- LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田
题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...
随机推荐
- 6.ALOHA协议
动态媒体接入控制/多点接入特点:信道并非在用户通信时固定分配给用户. 一.纯ALOHA协议 纯 ALOHA协议思想:不监听信道,不按时间槽发送,随机重发.想发就发 二.时隙ALOHA协议 时隙 ALO ...
- 《java常用设计模式之----单例模式》
一.简介 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创 ...
- vue学习(六) 事件修饰符 stop prevent capture self once
//html <div id="app"> <div @click="divHandler" style="height:150px ...
- Python网络编程基础|百度网盘免费下载|零基础入门学习资料
百度网盘免费下载:Python网络编程基础|零基础学习资料 提取码:k7a1 目录: 第1部分 底层网络 第1章 客户/服务器网络介绍 第2章 网络客户端 第3章 网络服务器 第4章 域名系统 第5章 ...
- Java基础知识_内存
前述:利用一段较为充足暑假时间,对以前的Java学习进行一个系统性的回顾,对于部分知识点进行记录和积累. Java中的内存 一 Java中的内存划分: Java中内存主要划分为五部分 栈(Stack) ...
- 华东师范大学p163页,用闭区间套定理证明数列的可惜收敛准则,被网友解决了。
- ImportError: /lib64/libm.so.6: version `CXXAB_1.3.8.' not found (required by /usr/local/python37/lib/python3.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)
问题背景 使用在AI项目中,由于需要用到tensorflow,scipy,sklearn等这些库,所以需要libstdc++库. 问题原因 这个问题的出现与写的代码无关,只与操作系统的libstdc+ ...
- __new__方法理解
class Foo(object): def __init__(self, *args, **kwargs): pass def __new__(cls, *args, **kwargs): retu ...
- C/C++编程笔记:C++入门知识丨运算符重载
本篇要学习的内容和知识结构概览 运算符重载使用场景 常规赋值操作 我们现在有一个类 想要实现这种赋值操作 具体实现如下: 所以说呢,我们在使用运算符进行运算的时候, 实际上也是通过函数来实现运算的. ...
- Latex—参考文献
在写文章的最后最让我头疼的就是参考文献的问题了.网上的资料也有很多,这里整合了很多资料得出了一个用bib文件的方法. 1. 显示确定参考文献(一句没什么用的废话). 2. 利用谷歌学术(镜像),如 ...