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

传送门http://uoj.ac/problem/31

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

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

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

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

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

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

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

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

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

输入格式

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

输出格式

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

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

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

请保证 mnm≤n 以及 1lr2n1≤l≤r≤2n,否则会被判 0 分。

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

样例一

input

)))()(((

output

2
1 6
5 8

explanation

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

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

限制与约定

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

时间限制:1s1s

空间限制:256MB

 

扫描 构造 脑洞题

显然最方便的结果是((()))的形式。

维护双指针扫描,head指向第一个右括号,tail指向head后面的第一个左括号,每步将两个位置的括号交换。

显然是 $ O(n) $的

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 char s[200010];
 6 int ans=0,L[100010],R[100010];
 7 int main(){
 8     int i;
 9     scanf("%s",s+1);
10     int n=strlen(s+1);
11     int hd=1;
12     for(i=1;i<=n;i++){
13         if(s[i]=='('){
14             while(hd<i && s[hd]!=')')hd++;
15             if(hd^i){
16                 swap(s[hd],s[i]);
17                 ans++;
18                 L[ans]=hd;R[ans]=i;
19             }
20         }
21     }
22     printf("%d\n",ans);
23     for(i=1;i<=ans;i++){
24         printf("%d %d\n",L[i],R[i]);
25     }
26     return 0;
27 }

 

转载于:https://www.cnblogs.com/SilverNebula/p/7061334.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

li怎么让文字在图片下面_div+css(ul li)实现图片上文字下列表布局

css样式表代码&#xff1a;html布局代码&#xff1a;效果图&#xff1a;html布局部分&#xff0c;可根据自己需要添加对应的div即可。1、CSS关键样式单词解释1)、ul.imglist{ margin:0 auto; width:536px; overflow:hidden}使用margin:0 auto&#xff0c;让ul结构布局居中&…

如何使用React Native样式表?

Without wasting much time, a style sheet as commonly known in a CSS is an object or block of code of many styling properties and values which is applied in a code when called. 在不浪费大量时间的情况下&#xff0c;CSS中通常已知的样式表是具有许多样式属性和值的…

【iCore1S 双核心板_ARM】例程三:EXTI中断输入实验——读取ARM按键状态

实验原理&#xff1a; 按键的一端与STM32的GPIO(PB9)相连&#xff0c;且PB9外接一个1k大小的限流上接电阻。 初始化时把PB9设置成输入模式&#xff0c;当按键弹起时&#xff0c;PB9由于上拉电阻的作用呈高电平&#xff08;3.3V&#xff09;&#xff1b; 当按键按下时&#xff0…

MySQL小黑框怎么打开_打开你的小黑框命令行,来跟我一起嗨嗨嗨

文章更新于2020-03-16关于电脑位数&#xff1a;位数代表cpu可寻址的内存地址大小。32位的cpu最多可使用4GB内存&#xff0c;而64位cpu能处理的内存范围就高多了。操作系统也类似&#xff0c;只要看到操作系统里面能识别8GB内存就可以知道cpu和操作系统都是64位。一、常用的 cmd…

您如何从Python的stdin中读取信息?

Python supports following ways to read an input from stdin (standard input), Python支持以下方式从stdin(标准输入)读取输入 &#xff0c; 1)使用sys.stdin (1) Using sys.stdin) sys.stdin is a file-like object on which we can call functions read() or readlines()…

CentOS7下的AIDE***检测配置

1、AIDE的简单介绍AIDE通过扫描一台&#xff08;未被篡改&#xff09;的Linux服务器的文件系统来构建文件属性数据库&#xff0c;以后将服务器文件属性与数据库中的进行校对&#xff0c;然后在服务器运行时对被修改的索引了的文件发出警告。出于这个原因&#xff0c;AIDE必须在…

mysql主从不同步 tar_Mysql主从不同步问题处理案例

在使用Mysql的主从复制架构中&#xff0c;有两个比较头疼的问题&#xff1a;1、主从数据不同步后如何处理2、主从同步延迟问题如何解决本文将根据实际案例来分析下问题1&#xff0c;至于问题2多数文档介绍的办法是启用多线程复制来解决&#xff0c;言归正传&#xff0c;这里的问…

编程语言优缺点_R编程语言的优缺点

编程语言优缺点In general, the R programming language is considered as the machine learning language. This is widely employed in the applications where the data analysis, visualization, and the sampling process are involved. The R programming language is ta…

mysql重做日志与binlog日志区别_MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结...

MySQL中有六种日志文件&#xff0c;分别是重做日志(redo log)回滚日志(undo log)二进制日志(binlog)错误日志(errorlog)慢查询日志(slow query log)一般查询日志(general log)中继日志(relay log)。其中重做日志和回滚日志与事务操作息息相关&#xff0c;二进制日志也与事务操作…

python 绘制三角函数_Python | 绘制三角函数

python 绘制三角函数Trigonometry is one of the most important parts in engineering and many times, therefore matplotlib.pyplot in combination with NumPy can help us to plot our desired trigonometric functions. In this article, we are going to introduce a fe…

《深入理解Elasticsearch(原书第2版)》一2.3.3 把查询模板保存到文件

本节书摘来华章计算机《深入理解Elasticsearch&#xff08;原书第2版&#xff09;》一书中的第2章 &#xff0c;第2.3.3节&#xff0c;[美]拉斐尔酷奇&#xff08;Rafal Ku&#xff09; 马雷克罗戈任斯基&#xff08;Marek Rogoziski&#xff09;著 张世武 余洪淼 商旦 译 …

python两个中文队列比较_具有两个优先级的优先级队列Python

使用NPE的策略-一个tuple作为队列优先级&#xff0c;tuple是(fpriority, spriority)&#xff1a;import Queueclass Job(object):def __init__(self, fpriority, spriority, descriptionblah, iatafoo , hopsample, costfree pitchers):self.fpriority fpriorityself.spriorit…

之江学院第0届 A qwb与支教 容斥与二分

题目链接&#xff1a; http://115.231.222.240:8081/JudgeOnline/problem.php?cid1005&pid0 题目描述&#xff1a; 给你三个数x, y, z 和 N 输出从1开始数第N个不是x, y, z 任意一个数的倍数的数字 解题思路&#xff1a; 一看到倍数我先想到素数唯一分解定理&#xff0c; …

java toarray_Java Vector toArray()方法与示例

java toarray向量类toArray()方法 (Vector Class toArray() method) Syntax: 句法&#xff1a; public Object[] toArray();public Object[] toArray(Type[] ty);toArray() method is available in java.util package. toArray()方法在java.util包中可用。 toArray() method i…

Python基础--环境配置、编码风格、基础概念、基本数据类型(1)

#######python########python的基本[rootdesktop ~]# yum install python -y[rootdesktop ~]# python -V ##查看python版本Python 2.7.5[rootdesktop ~]# python --versionPython 2.7.5为什么用/usr/bin/python关于python脚本中的第一行内容 :#!/usr/bin/python 这种写法表示…

java treemap_Java TreeMap keySet()方法与示例

java treemapTreeMap类的keySet()方法 (TreeMap Class keySet() method) keySet() method is available in java.util package. keySet()方法在java.util包中可用。 keySet() method is used to return a set of keys that exists in this TreeMap to be viewed in a Set. keyS…

mysql简单部署_安装部署Mysql实例(最简单快速噢)

题外话作为Mysql DBA&#xff0c;我们平时必须要熟练的一个最最基础的技能&#xff0c;即安装部署Mysql实例&#xff0c;所以本文分享一个快速安装部署Mysql实例的方法。一、环境介质准备Mysql安装包准备服务器准备我这里使用的是centos 7.x&#xff0c;此方法适用于任何其他li…

zabbix增加手机端4个url地址的返回值

由同事提供4个需要监控的url地址GET类型&#xff1a;http://10.15.24.61:809/UserCenterService.svc/getAccountInfo/563/9638POST类型&#xff1a;http://10.15.24.61:809/ProductService/userInvestVarietyYjsList/4/0/563/1/9638/1.0http://10.15.24.61:809/ProductService/…

java timezone_Java TimeZone setID()方法与示例

java timezoneTimeZone类的setID()方法 (TimeZone Class setID() method) setID() method is available in java.util package. setID()方法在java.util包中可用。 setID() method is used to set the id of this TimeZone. setID()方法用于设置此TimeZone的ID。 setID() metho…

iis php mysql 集成_如何在IIS上集成php(iis+mysql+php+zend)

下面介绍下如何在IIS上集成php、这里我就不说cgi了&#xff0c;因为cgi需要系统权限过高&#xff0c;不建议虚拟主机使用&#xff0c;而且cgi程序也很少有人用到&#xff0c;楼主说的要iis6.0结合php安装需要&#xff1a;windows2003系统 安装有IIS6.0php-5.1.1-Win32.zipmysql…