//发现dfs除了搜索功能外的其他功能,他本身是一种序列,这个题恰是“先序”的下一个(合法范围内)序列!

#include<iostream>
#include<string>
#include<vector>
using namespace std;
struct state
{
string s;
int sum_0;
int sum_1;
};
vector<state>v;
bool flag;
void dfs(int cur,state ss,int size,string xulie)
{
if(cur%2==0) //剪枝一:一旦发现小了,马上回溯!
{
string temp1(xulie,0,cur-1);//只比前cur个字符
if(ss.s<temp1)
{
return;
}
}
if(flag==1)return;
if(cur==size) //一次获得即可返回,DFS序列本可以是字典序!
{
if(ss.sum_0==ss.sum_1&&ss.s>xulie)
{ v.push_back(ss);flag=1;}
}
else
{
if(ss.sum_0<=size/2)
{
state temp_ss(ss); //只建立临时对象传递下去!
temp_ss.sum_0=ss.sum_0+1;temp_ss.s=ss.s+"0";
dfs(cur+1,temp_ss,size,xulie);
}
if(ss.sum_1+1<=ss.sum_0)
{
state temp_ss(ss);
temp_ss.sum_1=ss.sum_1+1;temp_ss.s=ss.s+"1";
dfs(cur+1,temp_ss,size,xulie);
}
}
}
int main()
{ string xulie;
while(cin>>xulie)
{
v.clear();
flag=0;
state ss;
ss.s="0";ss.sum_0=1;ss.sum_1=0; for(int i=0;i<xulie.size();i++)
{
if(xulie[i]=='(')
xulie[i]='0';
else
xulie[i]='1';
}
dfs(1,ss,xulie.size(),xulie);
if(!v.empty())
{
string temp2;
for(int i=0;i<v[0].s.size();i++)
{
if((v[0].s)[i]=='0')
temp2+='(';
else
temp2+=')';
}
cout<<temp2<<endl;
}
else cout<<"No solution"<<endl;
}
}

sgu179 SGU起航!的更多相关文章

  1. SGU Volume 1

    SGU 解题报告(持续更新中...Ctrl+A可看题目类型): SGU101.Domino(多米诺骨牌)------------★★★type:图 SGU102.Coprimes(互质的数) SGU1 ...

  2. webpack入坑之旅(四)扬帆起航

    这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...

  3. SGU 495. Kids and Prizes

    水概率....SGU里难得的水题.... 495. Kids and Prizes Time limit per test: 0.5 second(s)Memory limit: 262144 kil ...

  4. ACM: SGU 101 Domino- 欧拉回路-并查集

    sgu 101 - Domino Time Limit:250MS     Memory Limit:4096KB     64bit IO Format:%I64d & %I64u Desc ...

  5. 【SGU】495. Kids and Prizes

    http://acm.sgu.ru/problem.php?contest=0&problem=495 题意:N个箱子M个人,初始N个箱子都有一个礼物,M个人依次等概率取一个箱子,如果有礼物则 ...

  6. SGU 455 Sequence analysis(Cycle detection,floyd判圈算法)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=455 Due to the slow 'mod' and 'div' operati ...

  7. SGU 422 Fast Typing(概率DP)

    题目大意 某人在打字机上打一个字符串,给出了他打每个字符出错的概率 q[i]. 打一个字符需要单位1的时间,删除一个字符也需要单位1的时间.在任意时刻,他可以花 t 的时间检查整个打出来的字符串,并且 ...

  8. sgu 104 Little shop of flowers 解题报告及测试数据

    104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB 问题: 你想要将你的 ...

  9. 树形DP求树的重心 --SGU 134

    令一个点的属性值为:去除这个点以及与这个点相连的所有边后得到的连通分量的节点数的最大值. 则树的重心定义为:一个点,这个点的属性值在所有点中是最小的. SGU 134 即要找出所有的重心,并且找出重心 ...

随机推荐

  1. ArrayList不同循环方式

    一: ArrayList<String> list = new ArrayList<String>();  list.add("1");  list.add ...

  2. 【整理】iview中刷新页面的时候更新导航菜单的active-name

    iview中刷新页面的时候更新导航菜单的active-name https://blog.csdn.net/lhjuejiang/article/details/83212070

  3. QT_8_Qt中的事件处理_定时器事件_定时器类_事件分发器_事件过滤器_绘图事件_高级绘图事件_绘图设备_QFile 文件读写_QFileInfo文件信息

    Qt中的事件处理 1.1. 捕获QLabel中是鼠标事件 1.2. enterevent 鼠标进入 1.3. leaveevent 鼠标离开 1.4. 鼠标按下MyLabel::mousePressE ...

  4. 日常[splay]:水题记——普通平衡树(死亡调试)

    普通平衡树,模板的不能再模板的模板题.我调了两个小时... 早先看yyb大神的blog学习splay,看的风生水起然而没有发现,大神的坑没有填……没有rank操作和k_th操作. 只能自己摸索,问问大 ...

  5. python+Eclipse+pydev环境搭建1

    编辑器: Eclipse + pydev插件 1. Eclipse是写JAVA的IDE, 这样就可以通用了,学习代价小.  学会了Eclipse, 以后写Python或者JAVA 都可以. 2. Ec ...

  6. 【MyBatis】MyBatis Tomcat JNDI原理及源码分析

    一. Tomcat JNDI JNDI(java nameing and drectory interface),是一组在Java应用中访问命名和服务的API,所谓命名服务,即将对象和名称联系起来,使 ...

  7. 利用RestTemplate进行http调用

    在对接API的时候,会涉及调用第三方的服务,这时候可以利用RestTemplate进行调用,下面给大家展示一个简单的调用demo. package com.tanlu.user.api.control ...

  8. OERR: ORA-1410 "invalid ROWID" Master Note / Troubleshooting, Diagnostic and Solution (文档ID 1410.1)

    OERR: ORA-1410 "invalid ROWID" Master Note / Troubleshooting, Diagnostic and Solution (文档I ...

  9. python基础知识04-散列类型运算优先级和逻辑运算

    散列类型 1.集合 定义集合 se = {1,2,3,4} se = set()定义空集合 se = {1,3,5,7} se2 = {1,3,8,9} se & se2 {1,3} 交集 s ...

  10. POJ 1236 Network of Schools (强连通分量缩点求度数)

    题意: 求一个有向图中: (1)要选几个点才能把的点走遍 (2)要添加多少条边使得整个图强联通 分析: 对于问题1, 我们只要求出缩点后的图有多少个入度为0的scc就好, 因为有入度的scc可以从其他 ...