CodeForces 494A Treasure
来源:互联网 发布:苹果电脑mac怎么下游戏 编辑:程序博客网 时间:2024/05/18 09:34
原则:任意位置左边的左括号的数量必须小于等于右括号的数量。
先统计一遍左括号的数量和右括号的数量,将除了最后一个#号外的#号全填一个右括号,剩下的在最后一个#号处补齐。
然后扫一遍判断是否满足原则。
#include <cstdio>#include <cstring>#include <cmath>#include <iostream>using namespace std;char s[100100];int ans[100100];int left_num=0;int main(){ scanf("%s",s); int size=(int)strlen(s); int cnt=0; int left=0,right=0; for(int i=0;i<size;++i){ if(s[i]=='(') { ++left; ++left_num; } else if(s[i]==')') { ++right; --left_num; if(left_num<0){ printf("-1\n"); return 0; } } else { if(left_num<=0){ printf("-1\n"); return 0; } --left_num; ++cnt; } } int left1=0,right1=0; for(int i=size-1;i>=0;--i){ if(s[i]=='(') ++left1; else if(s[i]==')') ++right1; else break; } if(left1>right1){ printf("-1\n"); return 0; } if(left-right<cnt) printf("-1\n"); else { int k=0; for(int i=0;i<cnt-1;++i){ ans[k++]=1; } ans[cnt-1]=left-right-cnt+1; int tmp=0; k=0; for(int i=0;i<size;++i){ if(s[i]=='('){ ++tmp; } else if(s[i]==')'){ --tmp; if(tmp<0) { printf("-1\n"); return 0; } } else{ tmp-=ans[k]; ++k; if(tmp<0){ printf("-1\n"); return 0; } } } for(int i=0;i<cnt;++i){ printf("%d\n",ans[i]); } } return 0;}
整理了一下思路将代码重写了一下,如下
/*************************************************************************> File Name: 494A_.cpp> Author: UnknownCUnknown> Mail: jsnjhcb@icloud.com> Created Time: 二 2/ 3 13:30:09 2015 ************************************************************************/#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cctype>#include <vector>#include <map>#include <set>#include <stack>#include <list>#include <string>#include <cstdlib>#include <queue>#include <cmath>#include <climits>using namespace std;char s[100010];int main(){ gets(s); int size=(int)strlen(s); int l=0,r=0; int lastp=-1; int jn=0; for(int i=0;i<size;++i){ if(s[i]=='(') ++l; else if(s[i]==')') ++r; else { ++jn; lastp=i; } } if(l>=r+jn){ int tmp=l-(r+jn)+1; int le=0,ri=0; bool flag=false; for(int i=0;i<size;++i){ if(s[i]=='(')++le; else if(s[i]==')') ++ri; else{ if(i==lastp) ri+=tmp; else ++ri; } if(ri>le){ flag=true; puts("-1"); break; } } if(!flag&&ri==le){ for(int i=0;i<jn-1;++i){ puts("1"); } printf("%d\n",tmp); }else if(!flag){ puts("-1"); } } else puts("-1"); return 0;}
0 0
- CodeForces 494A Treasure
- codeforces 494A Treasure
- CodeForces 494A Treasure
- Treasure - CodeForces 494 A 水题
- CodeForces 494A Treasure 【greedy】
- Codeforces 494A Treasure (思维 模拟)
- Codeforces 494 A. Treasure && Codeforces Round #282 (Div. 1)
- Codeforces 817A Treasure Hunt
- Codeforces Round #282 (Div. 1) A. Treasure
- Codeforces Round #282 (Div. 1) A. Treasure
- Educational Codeforces Round 23 A. Treasure Hunt
- Educational Codeforces Round 23#A. Treasure Hunt
- 【DP】 Codeforces Round #286 A - Mr. Kitayuta, the Treasure Hunter
- CodeForces 506 Div.1 A. Mr. Kitayuta, the Treasure Hunter
- Codeforces Round #282 (Div. 1) A. Treasure (贪心)
- Codeforces Round #282 (Div. 2) A - Digital Counter B - Modular Equations C - Treasure
- Codeforces 106 D Treasure Island
- Codeforces 495C Treasure【贪心】
- 读取ARCGIS server发布出来的图层属性信息
- 一种免费下载CNKI、维普等资源的方法
- 抽象工厂模式
- Nginx反向代理+DNS轮询+IIS7.5 千万PV 百万IP 双线 网站架构案例
- Xml:MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence.
- CodeForces 494A Treasure
- Android面试-如何动态改变RelativeLayout中的按钮布局
- uva 10719 Quotient Polynomial
- ANDROID开发之SQLite详解
- DB2 DBA技能要求
- HDU - 2817 - A sequence of numbers (快速幂取模!)
- 树-堆结构练习——合并果子之哈夫曼树
- 第十六周 Problem C:相同的数字
- Word Search