H. Streets of Working Lanterns----思维题
来源:互联网 发布:python scrapy 教程 编辑:程序博客网 时间:2024/05/17 00:18
Policeman Anatoliy monitors a lair of unorganized criminal group spreading prohibited Asian drawings. The lair has only one entrance, which is also an exit. When someone enters into the lair, Anatoliy writes an opening round bracket in his notepad, and when someone comes out, he writes a closing round bracket.
Long surveillance provokes an appetite, so Anatoliy has to eat donuts not to starve to death. Unfortunately, after the surveillance had ended, Anatoliy discovered a lot of greasy stains left by donuts in his notepad, and they prevent to understand which brackets are opening or closing. He doesn't want his boss to shout on him, so he must restore his records. He ensured that the lair of criminals was empty before he started the surveillance and after he ended it.
The input contains a single string of length no more than 5·105. This string consists of characters «(», «)» and «?». Character «(» means that someone entered into the lair, character «)» means that someone came out of it, and character «?» means that there is a greasy stain on this place, and it's impossible to determine which of the other two characters was there initially.
Output a recovered string consisting of characters «(» and «)» only, so that Anatoliy really could write it in his notepad. If there are many suitable strings, output any of them. If Anatoliy messed up something and his records contained mistakes, output «Impossible», without quotes.
(?(?))
()(())
()
()
?(
Impossible
题目链接:http://codeforces.com/gym/101149/problem/H
这个题比赛的时候我没有做出来,想麻烦了,赛后按照柏皓的思路水了一发,过了,这个题就是让你把?变成“(”或“)”,看能不能完成括号匹配。
我们先计算一下字符串序列长度,奇数直接输出Impossible,然后我们计算需要多少个左括号,多少个右括号,?的规则是少多少个左括号就把前多少个?变成(,其他的就是),然后看看是否合法就可以。
代码:
#include <cstdio>#include <cstring>#include <iostream>using namespace std;int main(){ string s; while(cin>>s){ int len=s.length(); if(len&1){ cout<<"Impossible"<<endl; continue; } else{ int a=0,b=0; for(int i=0;i<len;i++){ if(s[i]=='(') a++; } int k=len/2-a; int c=0,d=0; bool flag=true; for(int i=0;i<len;i++){ if(s[i]=='?'&&k){ s[i]='('; k--; } else if(s[i]=='?'){ s[i]=')'; } if(s[i]=='(') c++; if(s[i]==')') d++; if(c<d){ flag=false; break; } } if(!flag||(c!=d)){ cout<<"Impossible"<<endl; } else{ cout<<s<<endl; } } } return 0;}
- H. Streets of Working Lanterns----思维题
- GYM 101149 H.Streets of Working Lanterns(贪心)
- Working Principles of CLR
- hdu 3364 Lanterns 高斯消元,模板题
- hdu 3364 Lanterns 高斯消元,模板题
- Working with Generators of Python
- Working of __asm__ __volatile__ (“” : : : “memory”)
- Organizing Containers of Balls----思维题
- D. Pair of Numbers----思维题
- 江苏省赛 --- H题 【树的直径+思维】
- SPOJ:368 Cobbled streets
- [CEOI2017]One-Way Streets
- hdu 3364 Lanterns(高斯消元模板题+亦或方程)
- hdu3364 Lanterns
- HDU3364 Lanterns
- Number of numbers [思维]
- hdu5578_Friendship of Frog_思维
- The Working Way of Motor Run Capacitors
- C#用代码创建的Button大小为什么不对?
- Windows下安装Git
- 【Java基础】Java异常处理
- 03编程上机练习
- Mybatis-Spring
- H. Streets of Working Lanterns----思维题
- 解决Sublime Text 2中文显示乱码问题
- 使用SQL语句打印直角三角形
- CakePHP系列(四)----配置
- sql 将纵列数据查询后为横向数据
- iOS攻防
- 最短路径—Dijkstra算法和Floyd算法
- IntelliJ IDEA 报错:Error:java: 未结束的字符串文字
- Linux下grep命令查找带有tab(退格)的字符(转载)