HDU 4915 Parenthese sequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4915
解题报告:从前往后遍历一次,每次判断')'的数目是不是满足 n < (i +1)/ 2,从后往前遍历一次,每次判断'('的数目是不是满足 n <= (len - i) / 2;
这样就可以判断出这个序列是否存在匹配的序列。接下来就是判断是Many还是Unique的情况,因为数据是10的六次方,所以遇到问号改成'(' 或')'暴力判断是不行的,但是我们可以判断出只要(和)的数目小于等于len / 2而且有三个连续的?那句是Many,否则再进行暴力判断,这样就可以大大减小时间复杂度。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = +;
char str[maxn]; int judge(char* str)
{
int len = strlen(str);
int a = ,b = ;
for(int i = ,j = len- ;i < len,j >= ;++i,--j)
{
if(str[i] == ')') a++;
if(str[j] == '(') b++;
if(a > (i + ) / ) return ;
if(b > (len - j) / ) return ;
}
return ;
}
int main()
{
// freopen("1005.in","r",stdin);
int T = ;
while(scanf("%s",str)!=EOF)
{
T++;
int ans;
ans = judge(str);
int l = strlen(str);
if(l & ) ans = ;
if(!ans)
{
puts("None");
continue;
}
int len = strlen(str);
int a = ,b = ,c = ,f = ,M = ;
for(int i = ;i < len;++i)
{
if(str[i] == '(') a++;
if(str[i] == ')') b++;
if(str[i] == '?')
{
f++;
c++;
}
else
{
M = max(M,f);
f = ;
}
}
if(a >= len / || b >= len / || c <= )
{
puts("Unique");
continue;
}
if(M >= )
{
puts("Many");
continue;
}
ans = ;
for(int i = ;i < len;++i)
if(str[i] == '?')
{
int tt = ;
str[i] = '(';
tt += judge(str);
str[i] = ')';
tt += judge(str);
if(tt == )
{
ans = ;
break;
}
str[i] = '?';
}
printf(ans? "Many\n":"Unique\n");
}
return ;
}
HDU 4915 Parenthese sequence的更多相关文章
- hdu 4915 Parenthese sequence(模拟)2014多培训学校5现场
		
Parenthese sequence Time Limit: ...
 - HDU 4915 Parenthese sequence _(:зゝ∠)_ 哈哈
		
哦,我没做 #include <cstdio> #include <cstring> #include <algorithm> const int N = 1000 ...
 - hdu 4915 Parenthese sequence 多校第五场
		
推断一个序列是否是有效是简单的. 可是推断序列是不是有多个解会出问题. 那么从i=0 ~l 假设读到问号,推断该问号成为(能否有效,该问号为)是否有效. 假设都有效,则必有多个解. 假设都无效,则无解 ...
 - 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 ...
 - HDU 5860 Death Sequence(死亡序列)
		
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
 - hdu4915 Parenthese sequence 贪心O(n)解法(new)
		
hdu4915 Parenthese sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K ...
 - HDU 1711 Number Sequence(数列)
		
HDU 1711 Number Sequence(数列) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
 - HDU 1005 Number Sequence(数列)
		
HDU 1005 Number Sequence(数列) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
 - HDU 5860 Death Sequence(递推)
		
HDU 5860 Death Sequence(递推) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5860 Description You ...
 
随机推荐
- protobuf 文件级别优化
			
package IM.BaseDefine;option java_package = "com.mogujie.tt.protobuf";option optimize_for ...
 - windows程序防狼术入门
			
当初由于一些原因以及兴趣,学习了一段时间软件逆向,对于软件加密解密有了点粗略的了解.而后看到某些同学辛辛苦苦的搞出个软件,自己费心费力去加密,但搞出来后往往能被秒破,实不忍心.今天大概总结下一些基本的 ...
 - 通过Ajax——异步获取相关问题解答
			
问题呈现: 解决方案: dataType定义的是接收的值的类型,及controller控制器返回什么类型的值,这就写成什么类型, 我写的是return content("...") ...
 - .net架构设计读书笔记--第三章 第8节 域模型简介(Introducing Domain Model)
			
一.数据--行为转变 很长的时间,典型的分析方法或多或少是以下两种,第一,收集需求并做一些分析,找出有关实体 (例如,客户. 订单. 产品) 和进程来实现. 第二,手持这种理解你尝试推断一个物 ...
 - 读JS高级API笔记_(DOM&&DOM2&&DOM3)哎呀——园龄才9个月啊
			
---恢复内容开始--- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...
 - Java异常-一般异常和运行时异常的区别
			
Java提供了两类主要的异常:runtime exception和checked exception.checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常.对于这种异常, JA ...
 - Java基础-数据类型转换
			
1).简单类型数据间的转换,有两种方式:自动转换和强制转换,通常发生在表达式中或方法的参数传递时. 自动转换 当一个较"小"数据与一个较"大"的数据一起运算 ...
 - Git环境的搭建及使用
			
管理工具 1. Git环境的搭建 a.下载Git installer,地址:http://git-scm.com/downloads a1.参考文档地址:http://www.open-open.co ...
 - 金融自助设备WOSA/XFS规范介绍
			
wosa(全称是windows开放式系统体系结构 windows open system architecture),是微软公司提出的一种在windows操作系统下的软件架构. wosa/xfs是基于 ...
 - [NOIP2009] 普及组
			
多项式输出 模拟 /*by SilverN*/ #include<algorithm> #include<iostream> #include<cstring> # ...