题目大意:

给定一个长度为2n的括号序列.定义一个关于区间[l,r]的翻转操作为位置平移对调.

即翻转")))()("可以得到"()()))(("

用不超过n次翻转操作使给出的序列变为合法的序列.\(n \leq 100000\)

题解:

因为给出了n次翻转操作的机会。

如果我们考虑构造出"(((((())))))"的合法的括号序列

很容易得到这样的策略:

  • 从左到右依次检查左半部分,如果出现了右括号,就向右找到第一个出现的左括号然后交换两括号,使当前位置变为左括号。

这样的话算上翻转序列的复杂度一共是\(O(n^3)\)

但是仔细思考可以发现,我们每次的翻转序列操作只交换了左右两端的括号。

因为右端点是从左端点开始向右寻找找到的第一个左括号。所以中间的括号全部都是右括号。

区间翻转不会对其造成任何影响

交换两端点即可,复杂度降到\(O(n^2)\)

我们又发觉右端点是单调的.

复杂度降到\(O(n)\)

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
x=0;char ch;bool flag = false;
while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
#define rg register int
#define rep(i,a,b) for(rg i=(a);i<=(b);++i)
#define per(i,a,b) for(rg i=(a);i>=(b);--i)
const int maxn = 200010;
char s[maxn];
struct Node{
int l,r;
Node(){}
Node(const int &a,const int &b){
l = a;r = b;
}
}sta[maxn];
int top;
int main(){
scanf("%s",s+1);
int n = strlen(s+1),j = 0;
rep(i,1,n){
if(s[i] == ')'){
j = max(i+1,j);
for(;j<=n;++j) if(s[j] == '('){
sta[++top] = Node(i,j);
swap(s[i],s[j]);
break;
}
}
}
printf("%d\n",top);
rep(i,1,top){
printf("%d %d\n",sta[i].l,sta[i].r);
}
return 0;
}

uoj problem 31 猪猪侠再战括号序列的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. 【UR #2】猪猪侠再战括号序列 题解

    题目链接 前言 是的没脑子选手只会做签到题. 思路分析 一开始把题目看成反转括号的状态,直接浪费 \(40\ mins\) . 我们考虑把不确定的"正确括号"转换成一个固定的括号序 ...

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

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

  8. BZOJ4350: 括号序列再战猪猪侠

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

  9. BZOJ4350: 括号序列再战猪猪侠【区间DP】

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

随机推荐

  1. Android hellocharts 柱形图详解

    近日需要做图表结构的项目,目前最火的就是hellocharts  和MPAndroidChart  相对来说hellocharts集成比较简单: 官网地址   https://github.com/l ...

  2. hdu4063(圆与圆交+线段与圆交+最短路)

    写几何题总是提心吊胆.精度问题真心吓人. 其实思路挺简单的一道题,真是什么算法和几何double搞到一块,心里就虚虚的. 思路:求出所有圆之间的交点,然后用这些交点跑一遍最短路就可以了. Aircra ...

  3. 小程序JSON数组操作

  4. iOS基础动画的KeyPath取值

    一 .基础动画 1.基础动画的属性详解 注:Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程. 属性 解读 Autoreverses 设定这个属性为 YES 时,在它到达目的 ...

  5. TRansportation ANalysis and SIMulation System

    https://www.fhwa.dot.gov/planning/tmip/transims/background.cfm?from=groupmessage

  6. 最简单的 GitExtensions 教程(持续更新中)

    一.安装 GitExtensions 下载 GitExtensions 完全版,一直点 Next,安装全部组件. 二.将项目文件夹/文件提交到 Git 服务器(以 GitHub 为例) 新建一个文件夹 ...

  7. STM32L0 HAL库 IO读写功能

    开发环境使用 MDK5.16a + CUBEMX生成代码 开发板使用:NUCLEO-L053R8 核心芯片:STM32L053R8 今天主要学习了下最基础的IO的读写,IO使用 PA5   LED输出 ...

  8. html post

    post请求对应的html页面 页面效果 html代码 <html> <body> <form method="post" > First na ...

  9. LintCode:链表操作(合并与反转)

    描述: (1)翻转一个链表 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null ********************** ...

  10. 【LeetCode】数组排列问题(permutations)(附加next_permutation解析)

    描述 Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3 ...