时间限制:0.25s

空间限制:12M

题意

      给定一个合法的仅由'(',')'组成的括号序列,求它的下一个合法排列.假定'('<')'.


Solution:

              先来回顾求下一个排列的算法:

                      对于一个排列 1 2 4 5 3

                      它的下一个排列将从后往前找到相邻的两个数是顺序的(即前面的数小于后面的数),将这两个数交换 得到 1 2 5 4 3

                      再将后面的所有数反转.

                       将得到

                                 1 2 5 3 4

                       即最后结果.

              对着道题来说,要保证交换的两个括号后得到的是合法的序列,只要记录每一个'('前面有多少个 '(',记为f[i],')'前面有多少个')',f[j].

              由于最后一位一定是')',所以只要在前面找到相邻的两个'('和')'  ,(注意到这里也是的顺序),满足f[i]>f[j];

              将最后的‘)’和‘(’ 交换位置,再把后面所以的括号反转。即可得到我们需要的解。

code:

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
#define sz(x) ((int) (x).size())
const int INF = 11111;
int f[INF], flag;
string s;
int main() {
cin >> s;
int s1 = 0, s2 = 0, len = s.size() - 1;
//记录f数组
for (int i = 0; i <= len; i++) {
if (s[i] == '(') f[i] = s1++;
else f[i] = s2++;
}
for (int i = len, t; i >= 0; i--) {
if (s[i] == ')') t = i;
else if (f[t] < f[i]) {
swap (s[len], s[i]);
//头文<algorithm>里的翻转操作
reverse (s.begin() + i + 1, s.end() );
flag = 1;
break;
}
}
//没有满足条件的顺序括号
if (flag == 0) cout << "No solution";
else cout << s;
}

  

  

SGU 179.Brackets light的更多相关文章

  1. SGU 179 Brackets light(生成字典序的下一个序列)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=179 解题报告:输入一个合法的括号串,求出这个括号串的字典序的下一个串.(认为'(' ...

  2. SGU179 Brackets light

    179. Brackets light time limit per test: 0.25 sec. memory limit per test: 131072 KB input: standard  ...

  3. SGU 分类

    http://acm.sgu.ru/problemset.php?contest=0&volume=1 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traff ...

  4. 今日SGU 5.13

    SGU 146 题意:就是给你一个长度为l的圈,然后你跑步,每一段给你时间t和速度v,问你最后离起点多远 收获:就是把浮点数转为整数,然后但是会出现精度误差,比如l最多四位小数,那你就加0.00001 ...

  5. vs code 插件收集

    名称 简述 Auto Close Tag 自动闭合HTML标签 Auto Import Typescript自动import提示 Auto Rename Tag 修改HTML标签时,自动修改匹配的标签 ...

  6. vscode python开发插件推荐

    vscode作为一款好用的轻量级代码编辑器,不仅支持代码调试,而且还有丰富的插件库,可以说是免费好用,对于初学者来说用来写写python是再合适不过了.下面就推荐几款个人觉得还不错的插件,希望可以帮助 ...

  7. 工具 - VS Code

    杂项 1. 主题 brackets light pro, One Monokai theme 2. directory tree indent guidelines, directory vertic ...

  8. 【代码编译器】vscode 配置详细介绍

    前言:运行环境.net6.0 C#10 安装.NET Core SDK和运行 官网下载地址:https://www.microsoft.com/net/download/core 安装.Net 4.7 ...

  9. SGU 538. Emoticons 水题

    538. Emoticons 题目连接: http://acm.sgu.ru/problem.php?contest=0&problem=538 Description A berland n ...

随机推荐

  1. 【转】SVN服务器端安装、配置与管理--不错

    原文网址:http://blog.csdn.net/qq505810824/article/details/7824929 搭建svn服务的方法步骤问题,主要有七个部分 .下面是具体的步骤介绍.   ...

  2. Linux学习笔记13——使用curses函数库

    一 安装curses库 如果你的Linux系统中curses库,直接敲入命令sudo apt-get install libncurses5-dev,然后就会自动安装curses库,安装好之后敲入命令 ...

  3. 支付返回post请求数据

    点击返回商家返回的post数据: {"requestBody":"singnType=&version=&businessId=00WGFKB20012& ...

  4. poj 3259 Wormholes【spfa判断负环】

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 36729   Accepted: 13444 Descr ...

  5. ios socket通讯注意事项

    前段时间,在做objetive-c下的Sokcet通讯,当使用C++程序做服务端时,一切正常;当用JAVA做服务端时,双方收不到数据,在查阅了一些资料后,整理一下注意点 1 消息末尾加回车和换行符 o ...

  6. 使用Spring-data-redis操作Redis的Sentinel

    介绍 Spring-Data-Redis项目(简称SDR) 是对Redis的Key-Value数据存储操作提供了更高层次的抽象,提供了一个对几种主要的redis的Java客户端(例 如:jedis,j ...

  7. thinkphp中使用PHPEXCEL导入数据

    导入方法比较简单 但必须考虑到Excel本身单元格格式问题 例如以0开头的字符串读出来被去掉了前导0 成为float型而丢失一位 必须进行处理 <?php /** * Author lizhao ...

  8. springframework hibernate Transaction not successfully started

    先贴出错误:org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transac ...

  9. 树莓派做AP发射wifi(RTL8188CUS芯片) 分类: shell ubuntu Raspberry Pi 2014-11-29 01:25 822人阅读 评论(0) 收藏

    最近在做一个项目,需要用树莓派作为AP发射wifi,对比cubieboard,树莓派的配置容易得多,而且支持也更多. 较为官方的介绍配置为无线热点的文章莫过于这一篇<RPI-Wireless-H ...

  10. 动态代理与AOP

    1. 代理的分类: 静态代理:每个代理类只能为一个接口服务 动态代理:可以通过一个代理类完成全部的代理功能(由JVM生成实现一系列接口的代理类,即:生成实现接口的类的代理) 2. 动态代理: 在Jav ...