大家好我是来自百度贴吧的_叫我猪猪侠,英文名叫_CallMeGGBond。

我不曾上过大学,但这不影响我对离散数学、复杂性分析等领域的兴趣;尤其是括号序列理论,一度令我沉浸其中,无法自拔。至于OI算法竞赛,我年轻时确有参加,虽仅获一枚铜牌,但我素性淡泊,毫不在意,毕竟那所谓FFT、仙人掌之类,只是些雕虫小技罢了,登不上大雅之堂的;只有括号序列才会真正激发我的研究热情。

我曾天真地以为,凭借我的学识与才能,足可以在这世间安身立命;然而直到沦落街头后,我终才领悟现实的残酷。迫于生计,我只得转向道德与哲学的研究;但我与括号序列之间情愫依旧,难以剪断。

理性的传播总是不顺的,研究的道路也是曲折的,但轻易放弃决不是我的风格;为了继续实现自己的理想,现在我向大家提出一道括号序列的超级大难题。

有一个由 nn 个左括号 “(” 和 nn 个右括号 “)” 组成的序列。每次操作时可以选定两个数 l,rl,r,然后把第 ll 到第 rr 个括号的顺序翻转(括号的朝向保持不变)。例如将 “()((()(” 翻转第 33 到第 77 个括号后的结果为 “()()(((”。

我希望使用不超过 nn 次操作,将这个序列变为一个合法的括号序列。

众所周知,合法括号序列的定义如下:

  1. () 是合法括号序列;
  2. 如果 A 是合法括号序列,则 (A) 是合法括号序列;
  3. 如果 A,B 是合法括号序列,则 AB 是合法括号序列。

自从来到 UOJ 这个宝地,我的视野变得开阔了,也见识了更多富有人类智慧的人士。我相信各位一定能给我更加满意的答案!

输入格式

一行一个长度为 2n2n 的非空字符串表示初始序列。保证字符串只包含左括号和右括号,且左右括号的个数均为 nn。

输出格式

对于给出的字符串,输出调整成合法的括号序列的方案。如果不存在这样的方案输出一行一个整数 −1−1。

否则,第一行一个整数 mm 表示要进行 mm 次翻转操作。

接下来 mm 行每行两个整数 l,rl,r 表示要翻转区间 [l,r][l,r] 内的括号顺序。翻转操作会按你输出的顺序执行。

请保证 m≤nm≤n 以及 1≤l≤r≤2n1≤l≤r≤2n,否则会被判 00 分。

如果有多组方案,输出任意一组即可。

样例一

input

)))()(((

output

2
1 6
5 8

explanation

第一次操作后序列变为 “()()))((”。

第二次操作后序列变为 “()()(())”。

限制与约定

测试点编号 nn的规模
1 n≤4n≤4
2 n≤100n≤100
3
4
5
6 n≤100000n≤100000
7
8
9
10

时间限制:1s1s

空间限制:256MB

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

贪心~

splay也能做……就是不知麻烦到哪里去了……

设'('==-1,')'==1,那么当now==0时,之前的括号都可以匹配。当now==1时,表示当前)比(多,一定要修改。所以我们线性扫一遍,记录now值,如果now==1,就从这里开始修改,直到修改到now==0的位置,记录一下然后扫完输出就可以了~

因为题目保证左右括号各n个,所以不存在无解的情况。

(我的程序是UOJ第二快~纪念一下~)

注意输入的字符串长度是2n的,小心RE!

#include<cstdio>
#include<cstring>int n,now,ans[100001][3],tot;
char ch[200001];int main()
{scanf("%s",ch+1);n=strlen(ch+1);for(int i=1;i<=n;i++){now+=ch[i]=='(' ? -1:1;if(now==1){ans[++tot][1]=i;for(i++;now;i++) now+=ch[i]=='(' ? -1:1;i--;ans[tot][2]=i;}}printf("%d\n",tot);for(int i=1;i<=tot;i++) printf("%d %d\n",ans[i][1],ans[i][2]);return 0;
}

UOJ #31 【UR #2】猪猪侠再战括号序列相关推荐

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

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

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

    题目大意:给你一个长度为$2n$的括号序列,保证$n$个`(`,$n$个`)`.要求输出一种可行方案,通过小于等于$n$的步数,每次交换区间$[x_i,y_i]$(立即交换),使得最后括号序列合法 题 ...

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

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

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

    ---恢复内容开始--- 大概就是判断合法的括号序列的问题,进行翻转使其成为合法的括号序列. 1.前缀和的做法:非常妙啊,左括号和右括号分别即为1和-1,合法的组合累加和一定为非负数,而不合法的情况就 ...

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

    显然可以直接凑左面全是左括号,右面全是右括号的情况. 然后区间翻转就用 splay 模拟好了. splay 的时候一定注意一点: 如果没有调用 find(x),就一定要手动把 x 及其祖先的节点 pu ...

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

    1e5 不一定是nlogn 也可能是o(n) 事实上如果是 1e6 o(n)会跑好久 然后题目中的限制有很大的用处 : nn 个左括号 "(" 和 nn 个右括号 ")& ...

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

    SOL: 我们用平衡树维护就好啦. // getlazy #include<bits/stdc++.h> using namespace std; inline int rop() {st ...

  8. [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)

    [BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...

  9. bzoj4350 括号序列再战猪猪侠

    Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列 ...

最新文章

  1. struts2中使用标签操作静态方法等
  2. php+循环定时任务,php定时任务循环执行replace操作无故中断
  3. 汇编之loop指令使用栈实现二重循环,同时了解汇编函数(过程)的概念用法
  4. Java虚拟线程:一种低成本、轻量级、用户态的Java线程
  5. 软件设计原则(七)合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)
  6. python条件语句函数_python sum 函数中可以使用条件语句吗
  7. eclise配置tomcat出现服务Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4 and Java EE 5 Web modules...
  8. 3月更新来了!Windows 11正式版22000.556发布
  9. 查一个字段中字符集超过30的列_详细解读MySQL的30条军规
  10. MySQL中的char与varchar详解
  11. T-SQL中的透视和逆透视
  12. 砸入近 30 亿美元后,马斯克拒绝加入 Twitter 董事会
  13. 搭建Open××× Server路由模式、证书认证
  14. 运用ffmpeg生成MP4文件
  15. centos7.5 mysql5.6_Centos7下完美安装并配置mysql5.6
  16. php如何防止恶意DDoS攻击,避免带宽占用问题方法
  17. 用数据告诉你,哪位导演是漫威影片中的票房收割机?
  18. 2019-08-01软件工程总结
  19. 用python写一段计算autocad多段线长度的代码
  20. EasyExcel解析excel(合并单元格和未合并)

热门文章

  1. 分析肖特基二极管产品属性及作用
  2. Spark基础 之 Spark的介绍
  3. 第二十六篇 -- 学习第四十天打卡20190803
  4. 抖音开启“学浪计划”,想要学习的我却决定卸载了
  5. Robotics XM430-W350 云台电机使用记录
  6. 读书笔记:《人间值得》
  7. Win7普通版升为旗舰版方法
  8. DS18B20精度设置程序
  9. 道格拉斯-普克Douglas-Peuker轨迹抽希算法和聚类算法联合应用于GPS轨迹数据处理
  10. 总局答复!如何界定检验检测机构出具不实检验检测报告的情形?