HDU 4915 多校5 Parenthese sequence
比赛的时候想了一个自认为对的方法,WA到死,然后还一直敲下去,一直到晚上才想到反例
找是否存在解比较好找,这种左右括号序列,把(当成1,把)当成-1,然后从前往后扫,+1或者-1 遇到?就当初(,然后如果扫到最后 中间没有出现负数说明左括号没问题
然后同样的方法从后往前扫,判断右括号那里是不是有问题即可。都没问题就有解,否则无解
当然应该要先判断下序列长度是不是偶数,奇数肯定是无解
至于为什么要像之前的处理即可判断有无解,首先只有正好走完的时候 和值为0才是真正合法(因为这个时候左右括号都对应了嘛)
他是偶数个+1或者-1,扫下来的和肯定也是偶数,只要扫到最后不出现负数,(出现负数说明中间有括号找不到匹配的括号)我们只要把中间的某些括号反向,最终一定可以使序列和值为0。所以正反两遍下来即可
最难的就是判断many和unique了,想了很多方法,依然做不好这一题(嘿嘿,盗用了后会无期的台词),还是最普遍的一种最好,即,判断是否有>=2个括号,正向和方向都可以
判断是否可行的方法就是上面的那个,但是我不可能暴力枚举每个括号,然后执行上面的操作,来判断他是否可行吧。。会超时的
所以要预处理一下,弄个prefix0代表i前面是否有前缀和<=1的,suffix0代表i后面的前缀和是否有<=1的,对某个?,如果由正变反的时候,suffix0存在,则不行,由反变正,prefix0存在,也不行
为什么呢,。因为反向代表总和值-2或者+2,所以只要有<=1的和值存在,反向可能就会使其变负值,是非法的。。。所以我们这样通过预处理一遍,再一遍扫描下来,即可得出结果
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1000000+10;
char str[N];
int num[N];
int prefix[N],suffix[N];
int pre0[N],suf0[N];
int main()
{
while (scanf("%s",str)!=EOF)
{
int len=strlen(str);
if (len&1){
printf("None\n");
continue;
}
memset(prefix,0,sizeof(prefix[0])*(len+2));
memset(suffix,0,sizeof(suffix[0])*(len+2));
memset(pre0,0,sizeof(pre0[0])*(len+2));
memset(suf0,0,sizeof(suf0[0])*(len+2));
for (int i=0;i<len;i++){
if (str[i]=='?') num[i+1]=0;
else if (str[i]=='(') num[i+1]=1;
else num[i+1]=-1; }
bool flag=1;
for (int i=1;i<=len;i++){
if (num[i]!=0) prefix[i]=prefix[i-1]+num[i];
else prefix[i]=prefix[i-1]+1;
if (prefix[i]<0){
flag=0;
break;
} }
for (int i=len;i>=1;i--){
if (prefix[i]<=1) pre0[i]=pre0[i+1]+1;
else pre0[i]=pre0[i+1];
}
if(!flag){
printf("None\n");
continue;
}
for (int i=len;i>=1;i--){
if (num[i]!=0) suffix[i]=suffix[i+1]-num[i];
else suffix[i]=suffix[i+1]+1;
if (suffix[i]<0){
flag=0;
break;
} }
for (int i=1;i<=len;i++){
if (suffix[i]<=1) suf0[i]=suf0[i-1]+1;
else suf0[i]=suf0[i-1];
}
if (!flag){
printf("None\n");
continue;
}
int cur=0;
for (int i=2;i<len;i++){
//cout<<"Test "<<i<<endl;
if (num[i]==0){
//cout<<prefix[i]<<" pre "<<pre0[i]<<endl;
//cout<<suffix[i]<<" suf "<<suf0[i]<<endl;
if (prefix[i]>=2 &&pre0[i]==0){
if (suffix[i]>=2 && suf0[i]==0) cur++;
}
}
}
if (cur>1) printf("Many\n");
else printf("Unique\n");
}
return 0;
}
HDU 4915 多校5 Parenthese sequence的更多相关文章
- hdu 4915 Parenthese sequence(模拟)2014多培训学校5现场
Parenthese sequence Time Limit: ...
- hdu 4915 Parenthese sequence--2014 Multi-University Training Contest 5
主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4915 Parenthese sequence Time Limit: 2000/1000 MS (Ja ...
- hdu4915 Parenthese sequence 贪心O(n)解法(new)
hdu4915 Parenthese sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K ...
- 2017 多校4 Wavel Sequence
2017 多校4 Wavel Sequence 题意: Formally, he defines a sequence \(a_1,a_2,...,a_n\) as ''wavel'' if and ...
- hdu 4915 Parenthese sequence 多校第五场
推断一个序列是否是有效是简单的. 可是推断序列是不是有多个解会出问题. 那么从i=0 ~l 假设读到问号,推断该问号成为(能否有效,该问号为)是否有效. 假设都有效,则必有多个解. 假设都无效,则无解 ...
- HDU 4915 Parenthese sequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4915 解题报告:从前往后遍历一次,每次判断')'的数目是不是满足 n < (i +1)/ 2,从 ...
- HDU 4915 Parenthese sequence _(:зゝ∠)_ 哈哈
哦,我没做 #include <cstdio> #include <cstring> #include <algorithm> const int N = 1000 ...
- hdu多校1002 Balanced Sequence
Balanced Sequence Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s) ...
- hdu 4915 括号匹配+巧模拟
http://acm.hdu.edu.cn/showproblem.php?pid=4915 给定一个序列,由()?组成,其中?可以表示(或者),问说有一种.多种或者不存在匹配. 从左向右,优先填满n ...
随机推荐
- (转)jquery.validate插件的使用
JQuery Validate使用总结:一.导入js库<script src="../js/jquery.js" type="text/javascript&quo ...
- QQ企业通--客户端登陆模块设计---知识点
AutoValidate 枚举 确定控件在失去用户输入焦点时应如何验证其数据. 成员名称 说明 Disable 将不进行隐式验证.设置此值将不会妨碍对 Validate 或 ValidateChil ...
- Java-Study
java中static用法: static :静态的,用于修饰成员(成员变量,成员方法): 1. 被static所修饰的变量或者方法会储存在数据共享区: 2. 被static所修饰的成员变量只有一份: ...
- 百度统计数据导出demo的坑
1.用户名中文的问题 由于demo文件格式的问题,如果用户名使用中文的话,会出现一下问题 ----------------------preLogin---------------------- [ ...
- Maven项目- "null" 的java.lang.reflect.InvocationTargetException 解决方法
异常显示: 解决方法:
- qrcode在手机上不显示的问题
可以试试以下解决方案: 1.修改qrcode.min.js:里的function n()红线区域替换成这个 , 原因是这样子才能支持安卓机显示.
- Linux 下JDK安装
ubuntu下安装jdk sudo apt-get install openjdk-8-jdk =============================================== Ce ...
- WIN2008中部署网站后样式及JS加载不了(转载)
今天在一台刚刚装好的WIN2008上部署一个问题,一切按流程来:① 控制面板加IIS,把.NET 3.5打勾② 装.NET 4.0框架③ 装MSSQL2012④ IIS中部署网站⑤ 修改web.con ...
- WOFF格式
WOFF格式WOFF文件格式是用WOFF (Web Open Font Format)创建的网页开放字体格式,Web开放字体格式(Web Open Font Format,简称WOFF)是一种网页所采 ...
- PWM与时间片思想
改编自:http://www.moz8.com/thread-79049-1-1.html 什么是PWM? PWM:脉冲宽度调制,由于在数字电路(或者单片机)输出模拟信号的成本高昂,换句话说,受制于只 ...