Codeforces Round #282 (Div. 2) C

来源:互联网 发布:无锡加工中心编程招聘 编辑:程序博客网 时间:2024/05/21 06:21

题目链接:http://codeforces.com/contest/495/problem/C


括号匹配。

因为#只能翻译成),所以就统计)和(+#的个数,搞一搞。不过以前没怎么做过,其实属于YY题啦。。

/* * ThinkingLion.cpp * *  Created on: 2014年1月29日 *      Author: dell */#include<stdio.h>#include<iostream>#include<string>#include<string.h>#include<algorithm>#include<iomanip>#include<vector>#include<time.h>#include<queue>#include<stack>#include<iterator>#include<math.h>#include<stdlib.h>#include<limits.h>#include<map>//#define ONLINE_JUDGE#define eps 1e-8#define INF 0x7fffffff#define FOR(i,a) for((i)=0;i<(a);(i)++)#define MEM(a) (memset((a),0,sizeof(a)))#define sfs(a) scanf("%s",a)#define sf(a) scanf("%d",&a)#define sfI(a) scanf("%I64d",&a);#define pf(a) printf("%d\n",a)#define pfs(a) printf("%s\n",a)#define sfd(a,b) scanf("%d%d",&a,&b)#define for1(i,a,b) for(int i=(a);i<b;i++)#define for2(i,a,b) for(int i=(a);i<=b;i++)#define clr1(a) memset(a,0,sizeof(a))#define clr2(a) memset(a,-1,sizeof(a))const double PI=acos(-1.0);template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}template<class T> inline T Min(T a,T b){return a<b?a:b;}template<class T> inline T Max(T a,T b){return a>b?a:b;}using namespace std;#define ll long longint n,m,k;#define N 100005const int Mod = 1e9+7;char s[100005];int flag;int main(){#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);#endifint t;while(sfs(s)!=EOF){//处理方法为非最后一个#都代替1个,最后一个#号匹配所有未匹配的(int len = strlen(s);int c = 0;int tmp;int pos;int flag = 0;for(int i=0;i<len;i++){//c代表还未匹配的'('数目,也即是'#'需要代替的个数if(s[i] == '(') c++;else if(s[i] == ')') c--;else{tmp = c--;pos = i;}if(c<0){//说明在某一段字符串中,')'+'#' 的个数 > '('的个数 ,不可行printf("-1\n");flag = 1;break;}}if(flag)continue;tmp -= (c+1);//得到的tmp为从最后一个#号到字符串末尾的出现的  ')'  的个数。if(tmp<0){printf("-1\n");continue;}for(int i=pos+1;i<len;i++){  //pos为最后一个'#'的位置if(s[i] == ')') tmp--;else tmp++;if(tmp<0 || (i==len-1&&tmp!=0)){  //原则上是该段字符串中 )的数目 == tmp,否则不可行printf("-1\n");flag=1;break;}}if(flag)continue;for(int i=0;i<len;i++){   //非最后一个#都为1,最后一个补成c+1个')'if(s[i] == '#'){if(i!=pos)printf("1\n");elseprintf("%d\n",c+1);}}}return 0;}




0 0