SGU 179 Brackets light(生成字典序的下一个序列)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=179
解题报告:输入一个合法的括号串,求出这个括号串的字典序的下一个串。(认为'(' < ')')
我的做法主要是用了生成字典序的下一个序列的思想:
1.从序列的尾部开始往前找,找到第一个升序的位置例如 2 5 4 3 对于这个序列来说就是2 5这个位置
2.然后在后面这个降序的序列中找到一个比这个2稍大一点的数跟2进行交换得到3 5 4 2
3.然后把这个位置的后面的串转过来得到3 2 4 5,这就是我们要的结果
对于这题来说,串中只有()这两种字符,所以我们在找第一个升序的位置的时候只要找到形如‘(’ ‘)’这样的序列的位置就是了
然后还有一个存不存在下一个字典序列的问题。我们看,对于形如(())这样有嵌套关系的括号,我们总是可以通过把这层嵌套拆开来得到一个更大的序列,
所以我们想到形如()()这样的序列不能拆开,所以,我们只要判断是不是()()这样的序列就可以了。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<deque>
using namespace std;
const int maxn = +;
char str[maxn]; int update(char *s)
{
int i,len = strlen(s);
for(i = len - ;i > ;--i)
if(s[i] > s[i-])
{
swap(s[i],s[i-]);
reverse(s+i+,s+len);
return ;
}
return ;
}
int judge(char *s)
{
int len = strlen(s);
deque<char> que;
for(int i = ;i < len;++i)
{
if(s[i] == '(')
que.push_front(s[i]);
else
{
if(que.empty())
return ;
else que.pop_front();
}
}
que.clear();
return que.empty();
} int main()
{
while(scanf("%s",str)!=EOF)
{
int l,len = strlen(str),flag = ;
for(l = ;l < len;++l)
if(str[l] == '(' && str[l+] != ')')
break;
if(l >= len)
flag = ;
while(flag)
{
update(str);
if(judge(str))
break;
}
printf(flag? "%s\n":"No solution\n",str);
}
return ;
}
SGU 179 Brackets light(生成字典序的下一个序列)的更多相关文章
- SGU 179.Brackets light
时间限制:0.25s 空间限制:12M 题意 给定一个合法的仅由'(',')'组成的括号序列,求它的下一个合法排列.假定'('<')'. Solution: ...
- leetcode 31. Next Permutation(字典序的下一个)
描述: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...
- POJ:1833 按字典序找到下一个排列:
http://poj.org/problem?id=1833 按照字典的顺序(a-z) (1-9),可以得出任意两个数字串的大小.比如“123”, 最小的是“123”(从小到大),最大的是“321”( ...
- next_permutation():按字典序输出下一个排列
#include<iostream> #include<algorithm> using namespace std; int main() { int data[4]={5, ...
- 31. Next Permutation (java 字典序生成下一个排列)
题目: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...
- SGU179 Brackets light
179. Brackets light time limit per test: 0.25 sec. memory limit per test: 131072 KB input: standard ...
- 下一个更大的数 Next Greater Element
2018-09-24 21:52:38 一.Next Greater Element I 问题描述: 问题求解: 本题只需要将nums2中元素的下一个更大的数通过map保存下来,然后再遍历一遍nums ...
- MySQL下创建序列及创建自定义函数方法介绍
工作过程中需要将基于DB2数据库的应用以及数据迁移到MySQL中去,在原应用中,大量使用了SEQUENCE,考虑尽量减少代码的修改,决定在迁移后的应用中继续保留SEQUENCE的使用,这就要求在MyS ...
- NLP之TextRNN(预测下一个单词)
TextRNN @ 目录 TextRNN 1.基本概念 1.1 RNN和CNN的区别 1.2 RNN的几种结构 1.3 多对多的RNN 1.4 RNN的多对多结构 1.5 RNN的多对一结构 1.6 ...
随机推荐
- 关于json 与 Request Header 的Content-Type 一些关系。
由于最近遇到关于,ashx文件ajax解析参数的问题.查询网上很多资料后,已经解决. 鉴于网上已经足够多的,关于这个问题的文章.大部分内容来自互联网,我这里只是做一些整理和记录.特此说明并非原创. C ...
- grootJs的vm结构
按看这段代码生成的vm groot.view("myview", function (vm, ve) { vm.say = "hello word!"; }) ...
- jQuery问题:$XXX is not a function
用火狐浏览器打开,js代码一段不执行,F12以后看见下面的错误: 网上查看说是jQuery文件引用的问题,把jQuery.js引入语句修改了一下,果然没有错了. 我原来的引用语句是:<scrip ...
- [vijos1264]神秘的咒语(LCIS)
描述身为拜月教的高级间谍,你的任务总是逼迫你出生入死.比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底.据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语.为了习得这些法术, ...
- ThinkPHP中的跨控制器调用与框架执行流程
一.跨控制器调用 UserController.class.php <?php namespace Home/Controller use Think/Controller class User ...
- android之文件权限问题
当我们在手机上安装一个应用的时候,linux会为每个APP创建一个用户名和用户组 xidian.dy.com.chujia是系统为每个应用创建的一个独立的文件夹,我们可以看到这个文件的所有者为app_ ...
- 2016 版 Laravel 系列入门教程(一)【最适合中国人的 Laravel 教程】
本教程示例代码见: https://github.com/johnlui/Learn-Laravel-5 在任何地方卡住,最快的办法就是去看示例代码. 本文基于 Laravel 5.2 版本,无奈 5 ...
- java和linux的编码
最近要使用中科院计算所的关键词工具NLPIR,用java调用,在windows下测试后放到linux下跑,就发现会有乱码. windows下默认是GBK,linux下是utf-8,因此在意料之中(尽管 ...
- Codeforces Round #381 (Div. 2) D. Alyona and a tree 树上二分+前缀和思想
题目链接: http://codeforces.com/contest/740/problem/D D. Alyona and a tree time limit per test2 secondsm ...
- Memcache查看运行状况
连接上memcache telnet 127.0.0.1 11211 当前memcache的状态 stats pid memcache服务器的进程ID uptime 服务器已经运行的秒数 time 服 ...