CF 282C Treasure
来源:互联网 发布:怎么用数据库做购物车 编辑:程序博客网 时间:2024/05/16 15:12
Malek has recently found a treasure map. While he was looking for a treasure he found a locked door. There was a strings written on the door consisting of characters '(', ')' and '#'. Below there was a manual on how to open the door. After spending a long time Malek managed to decode the manual and found out that the goal is to replace each '#' with one or more ')' characters so that the final string becomes beautiful.
Below there was also written that a string is called beautiful if for each i (1 ≤ i ≤ |s|) there are no more ')' characters than '(' characters among the first i characters of s and also the total number of '(' characters is equal to the total number of ')' characters.
Help Malek open the door by telling him for each '#' character how many ')' characters he must replace it with.
The first line of the input contains a string s (1 ≤ |s| ≤ 105). Each character of this string is one of the characters '(', ')' or '#'. It is guaranteed thats contains at least one '#' character.
If there is no way of replacing '#' characters which leads to a beautiful string print - 1. Otherwise for each character '#' print a separate line containing a positive integer, the number of ')' characters this character must be replaced with.
If there are several possible answers, you may output any of them.
(((#)((#)
12
()((#((#(#()
221
#
-1
(#)
-1
|s| denotes the length of the string s.
解析
模拟,前面的#都是1,最后一个#补完所有的前面欠的)
如果没法判断合法性就在输出的地方加个for循环判断。
#include<iostream>#include<cstdio>#include<string>using namespace std;//#define LOCALstring s;int tmp[100005];void work(){int N=s.size(),last=-1,cnt=0;for(int i=N-1;i>=0;i--) if(s[i]=='#') {last=i; break;}//First time: Have a try.for(int i=0;i<N;i++){if(s[i]=='(') cnt++;if(s[i]==')') cnt--;if(s[i]=='#') tmp[i]=1,cnt--;}if(cnt>0) tmp[last]+=cnt;//Second time: check the answer.cnt=0;for(int i=0;i<N;i++){if(s[i]=='(') cnt++;if(s[i]==')') cnt--;if(s[i]=='#') cnt-=tmp[i];if(cnt<0) {printf("-1");return;}}if(cnt!=0) printf("-1");else for(int i=0;i<N;i++) if(tmp[i]!=0) printf("%d\n",tmp[i]);}int main(){#ifdef LOCALfreopen("C.in","r",stdin);#endifwhile(cin >> s){#ifdef LOCALprintf("\nCASE:\n");#endifwork();}#ifdef LOCALwhile(1);#endifreturn 0;}
- CF 282C Treasure
- CF#282 Div 2 C Treasure
- CF#494C Treasure
- CF 495C. Treasure 模拟(括号配对)
- cf 505c Mr. Kitayuta, the Treasure Hunter
- dp cf C. Mr. Kitayuta, the Treasure Hunter
- cf 106d Treasure Island
- CF 286DIV2 C. Mr. Kitayuta, the Treasure Hunter(dp)
- CF 505C(Mr. Kitayuta, the Treasure Hunter-Dp考虑可用范围)
- cf#186-C. Mr. Kitayuta, the Treasure Hunter-dp(预推断+offset)
- Codeforces Round #282 (Div. 2) B. Modular Equations&C. Treasure
- Codeforces Round #282 (Div. 2) C. Treasure 贪心
- Codeforces 495C Treasure【贪心】
- CF 282 A 282B 282C
- Codeforces Round #282 (Div. 2) A - Digital Counter B - Modular Equations C - Treasure
- **Codeforces Round #282 (Div. 2) C. Treasure ACM解题报告(构造难题)
- 宝物筛选(Treasure.pas/c/cpp)
- CF 190C STL
- 使用bs4和urllib2抓取网页,都是坑
- Unity对象多个生成
- nyoj 36 最长公共子序列
- jsp实现登陆验证码
- ns 2.35中移值gpsr协议(KeLiu版)
- CF 282C Treasure
- outlook 签名 设置
- 完成按照日期排列
- matlab 精通指南(例程)
- System.getProperty
- Java之美[从菜鸟到高手演练]之Hadoop原理及架构
- RedisClient
- UILabel如何使用sizeToFit正确适配行数
- flow control通常的方法