【Codeforces 494A】Treasure
【链接】  我是链接,点我呀:) 
 【题意】
让你把"#"用至少一个右括号代替
使得整个括号序列合法
【题解】
首先我们不要考虑井号
考虑最简单的括号序列
并且把左括号看成1,右括号看成是-1
然后用a[]表示它的一个前缀和(a[0]=0)
这样
这个括号序列合法的充要条件就是
①a[i]>=0 (1这样我们就把括号问题转换成一个仅仅为不等式和一个等式的问题了
而井号仅仅会增加-1,即让某一段往后的a[i]都变小
那么我们先这样,让所有的井号都先用1个右括号代替
这样之后,再看看形成的括号序列是否满足①
如果不满足,则输出-1
如果满足
那么我们接下来就是要想办法把a[len(s)]变成0了
办法肯定就是在某些井号的位置加上右括号
怎么加呢?
肯定是加在最末尾的那个井号位置。
因为这样的话,这a[leng(s)]个需要的右括号才会对最少的a[]造成影响。
也就使得尽可能少的a[]有变成小于0的可能性
最后再检查一下最后一个井号以及它后面的a[]是否大于等于0就好。
(此时a[len(s)]肯定已经变成0了,因为加入了所需的右括号)
【代码】
import java.io.*;
import java.util.*;
public class Main {
    static InputReader in;
    static PrintWriter out;
    public static void main(String[] args) throws IOException{
        //InputStream ins = new FileInputStream("E:\\rush.txt");
        InputStream ins = System.in;
        in = new InputReader(ins);
        out = new PrintWriter(System.out);
        //code start from here
        new Task().solve(in, out);
        out.close();
    }
    static int N = (int)1e5;
    static class Task{
        String s;
        int a[] = new int[N+10],n;
        int cnt = 0;
        public void solve(InputReader in,PrintWriter out) {
        	s = in.next();
        	n = s.length();
        	int idx = 0;
        	for (int i = 0;i < n;i++) {
        		if (s.charAt(i)=='(') {
        			a[i+1] = 1;
        		}else if (s.charAt(i)==')') {
        			a[i+1] = -1;
        		}else {
        			cnt++;
        			idx = i+1;
        			a[i+1] = -1;
        		}
        	}
        	for (int i = 1;i <= n;i++) {
        		a[i]+=a[i-1];
        	}
        	for (int i = 1;i <= n;i++) {
        		if (a[i]<0) {
        			System.out.println(-1);
        			return;
        		}
        	}
        	int temp = a[n];
        	for (int i = idx;i <= n;i++) {
        		a[i]-=a[n];
        		if (a[i]<0) {
        			System.out.println(-1);
        			return;
        		}
        	}
        	for (int i = 1;i <= cnt-1;i++) {
        		out.println(1);
        	}
        	out.println(temp+1);
        }
    }
    static class InputReader{
        public BufferedReader br;
        public StringTokenizer tokenizer;
        public InputReader(InputStream ins) {
            br = new BufferedReader(new InputStreamReader(ins));
            tokenizer = null;
        }
        public String next(){
            while (tokenizer==null || !tokenizer.hasMoreTokens()) {
                try {
                tokenizer = new StringTokenizer(br.readLine());
                }catch(IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }
        public int nextInt() {
            return Integer.parseInt(next());
        }
    }
}
												
											【Codeforces 494A】Treasure的更多相关文章
- 【Codeforces 979B】Treasure Hunt
		
[链接] 我是链接,点我呀:) [题意] 每次你可以将一个字符变成一个不同于本身的字符. 每个人需要改变n次(且不能不改变) 设每个人的字符串中出现次数最多的字符出现的次数为cnt[0~2] 问你谁的 ...
 - 【codeforces 415D】Mashmokh and ACM(普通dp)
		
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
 - 【codeforces 505C】Mr.Kitayuta,the Treasure Hunter
		
[题目链接]:http://codeforces.com/problemset/problem/505/C [题意] 一开始你跳一步长度为d; 之后你每步能跳d-1,d,d+1这3种步数; 然后在路上 ...
 - 【codeforces 707E】Garlands
		
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
 - 【codeforces 707C】Pythagorean Triples
		
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
 - 【codeforces 709D】Recover the String
		
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
 - 【codeforces 709B】Checkpoints
		
[题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...
 - 【codeforces 709C】Letters Cyclic Shift
		
[题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...
 - 【Codeforces 429D】 Tricky Function
		
[题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...
 
随机推荐
- E20170526-hm
			
plain n. 平原; 平地; adj. 平的; 素的; 清晰的; 相貌平平的; layout n. 布局,安排,设计; 布置图,规划图; modularity n. 模块化; 模块性 ...
 - 公司5:JrVue表格
			
组件名称:jr-dynamic-query-table 组件布局 table组件名称: jr-dynamic-query-table 分页组件名称: el-pagination <div re ...
 - 乐搏讲自动化测试-Python发展背景(1)
			
相信小伙伴们都知道,随着软件测试行业的发展和进步自动化测试已经成为必然.在竞争日益激烈的市场环境中也是你升职加薪的利器. 所以,小编决定从今天起!将要系统.连续.高质量的持续更新「整套自动化测试」文章 ...
 - IDEA 激活方式
			
最新的IDEA激活方式 使用网上传统的那种输入网址的方式激活不了,使用http://idea.lanyus.com/这个网站提供的工具进行 1.进入hosts文件中:C:\Windows\System ...
 - [LOJ#10064]黑暗城堡
			
Description 在顺利攻破 Lord lsp 的防线之后,lqr 一行人来到了 Lord lsp 的城堡下方.Lord lsp 黑化之后虽然拥有了强大的超能力,能够用意念力制造建筑物,但是智商 ...
 - 【BZOJ4059】Non-boring sequences(分析时间复杂度)
			
题目: BZOJ4059 分析: 想了半天没什么想法,百度到一个神仙做法-- 设原数列为 \(a\),对于每一个 \(i\) 求出前一个和后一个和 \(a_i\) 相等的位置 \(pre[i]\) 和 ...
 - python闭包的使用
 - TimeOut Error :因为远程服务器关闭导致mnist数据集不能通过input_data下载下来
			
解决办法: 修改文件: C:\Users\501-PC\AppData\Local\Programs\Python\Python35\Lib\site-packages\tensorflow\con ...
 - 《从Paxos到ZooKeeper 分布式一致性原理与实践》阅读【Watcher】
			
ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能. ZooKeeper ...
 - Git命令add和commit的区别
			
要想弄明白git add和git commit的区别,首先我们需要知道三个概念:工作区(Working Directory).版本库(Repository).暂存区(Stage or index). ...