http://acm.hdu.edu.cn/showproblem.php?pid=4915

给定一个序列,由()?组成,其中?可以表示(或者),问说有一种、多种或者不存在匹配。

从左向右,优先填满n/2个左括号,继续填充右括号。如果过程中出现矛盾(右括号数超过左括号数),则为None,否则要判断唯一解还是多解。

之前遍历的时候记录恰好填满了n/2个左括号后,第一次添加右括号的位置强行设置成左括号,问号数自减一,在跑一遍,若能跑通则说明有多解,否则单一解

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define clr0(x) memset(x,0,sizeof(x)) typedef long long LL; int n;
char s[1000010];
int a[1000005],b[1000005],tot,t,m;
int main()
{
while (scanf("%s",s)!=EOF){
n=strlen(s);
int i,j,k;
tot = m = t = 0;
if(n%2){puts("None");continue;}
for(int i = 0;i < n;++i){
if(s[i] == '('){
a[i] = b[i] = 1;
tot++;
}else if(s[i] == ')')
a[i] = b[i] = -1;
else{
a[i] = b[i] = 0;
m++;
}
}
t = n-tot-m;
if(tot > n/2 || t > n/2){puts("None");continue;}
t = n/2 - tot;
int pos = -1;
for (k = 0,i = 0;i < n;++i){
if (a[i] == 0){
if (t)
--t,k++;
else{
if(pos == -1)
pos = i;
k--;
}
}
else k+=a[i];
if (k < 0){
puts("None");
goto end;
}
}
if(k != 0){
puts("None");
continue;
}
t = n/2 - tot;
if(t == m || t == 0){
puts("Unique");
continue;
}
--t;
for(b[pos] = 1,k = 0,i = 0;i<n;++i){
if(b[i] == 0){
if (t) --t,k++;
else k--;
}
else k += b[i];
if (k < 0){
puts("Unique");
goto end;
}
}
puts("Many");
end:;
}
return 0;
}

hdu 4915 括号匹配+巧模拟的更多相关文章

  1. hdu 4915 Parenthese sequence(模拟)2014多培训学校5现场

    Parenthese sequence                                                                     Time Limit: ...

  2. HDU 4283 You Are the One ★(进出栈的括号匹配性质:区间DP)

    题意 有一个队列,每个人有一个愤怒值D,如果他是第K个上场,不开心指数就为(K-1)*D.但是边上有一个小黑屋(一个FILO堆栈),可以一定程度上调整上场程序,求一种安排上场方案使得所有人的不开心指数 ...

  3. STL版 括号匹配(感觉不如之前自己用数组模拟的跑的快)

    数据结构实验之栈四:括号匹配 Time Limit: 1000MS Memory limit: 65536K 题目描述  给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的 ...

  4. 【栈思想、DP】NYOJ-15 括号匹配(二)

    括号匹配(二) 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能 ...

  5. NYOJ 题目15 括号匹配(二)(区间DP)

    点我看题目 题意 : 中文题不详述. 思路 : 本来以为只是个小模拟,没想到是个区间DP,还是对DP不了解. DP[i][j]代表着从字符串 i 位置到 j 位置需要的最小括号匹配. 所以初始化的DP ...

  6. C语言数据结构之栈:括号匹配

    括号匹配这是个很简单的题目,如果只有小括号,就模拟进栈和出栈的过程就行了: 注:输入时'@'作为结束标志 #include <stdio.h> int main() { freopen(& ...

  7. 带问号的括号匹配问题918C 1153C

    cf里好像经常出 这些题,一般贪心是搞不了的.. 918C 问有多少子段[l,r]满足合法括号 先从左往右扫,如果问号+‘(' 数量 >= ')' 说明这段区间的 ) 是满足条件的 然后再从右往 ...

  8. 洛谷 P1739 表达式括号匹配

    题目链接https://www.luogu.org/problemnew/show/P1739 题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为 ...

  9. DP_括号匹配序列问题

    括号匹配问题 简单括号匹配问题是给出字符串,判断字符串中的括号是否匹配,此类问题核心解决方案就是利用栈的后进先出的特性,从左到右依次遍历字符串,遇左括号进栈,遇右括号将其与栈顶元素配对,若能配对,则栈 ...

随机推荐

  1. HDU_2112(最短路)

    经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬 ...

  2. (O)JS高阶函数应用——函数节流

    在一些函数需被频繁调用的场景,如:window.onresize.mousemove.scroll滚动事件.上传进度等等,操作频繁导致性能消耗过高,而造成浏览器卡顿现象,我们可以通过函数节流的方式解决 ...

  3. Redhat Linux网卡配置与绑定

    Redhat Linux的网络配置,基本上是通过修改几个配置文件来实现的,虽然也可以用ifconfig来设置IP,用route来配置默认网关,用hostname来配置主机名,但是重启后会丢失. 相关的 ...

  4. 使用Tophat+cufflinks分析差异表达

    使用Tophat+cufflinks分析差异表达  2017-06-15 19:09:43     522     0     0 使用TopHat+Cufflinks的流程图 序列的比对是RNA分析 ...

  5. p值还是 FDR ?

    p值还是 FDR ? 差异分析 如何筛选显著性差异基因,p value, FDR 如何选 经常有同学询问如何筛选差异的基因(蛋白).已经计算了表达量和p value值,差异的基因(蛋白)太多了,如何筛 ...

  6. export export defalut

    require/exports 和 import/export 形式不一样 require/exports 的用法只有以下三种简单的写法: const fs = require('fs') expor ...

  7. Use Laravel/homestead 环境维护基于 brophp 开发的老项目

    1 前言 laravel/homestead 无疑是 laravel 项目开发的最佳环境. 如何使用这个环境维护基于 Brophp (或 Thinkphp) 开发的老项目呢? 以下是测试成功的步骤. ...

  8. swift MD5 加密方法

    引入OC类库 md5.h: #import <UIKit/UIKit.h> @interface Md5Controller : UIViewController @end md5.m: ...

  9. callable与runable区别?switch char ?sql只查是否存在,sql复制表 ?反射 ? spring mvc 和spring 上下文区别?

    中化技术部  2018.4.16 1. callable 和 thread 区别 实现Callable接口的线程能返回执行结果,而Runable 不可以 . Callable 的call方法允许抛出异 ...

  10. python入门之深浅copy

    a1=["a","b","c","aa"] b1=a1 a1[0]=" print(a1,b1) 此时结果为: ...