Parenthesis UVALive - 4882 删除不必要的括号序列,模拟题 + 数据
题目就是要求把多余的括号序列删了,一直wa
我的思路是暴力,暴力枚举每一对括号,在其括号区间,(没对括号都应该有属于自己的区间)暴力找是否能删除。
能删的条件是:这个括号的上一个运算是加法,这是不影响的,或者其是'(',就是((这样的情况,然后第一个括号不能删,那么第二个括号是可以删的。
否则,如果是乘法的话,那还需要看看这对括号里面是否存在加法,有就不行。
还要判断(a + b)(a + c)这样的情况,后面跟上一个乘法,
我被坑得是(ab)(c)这样的情况,中途没出现加号,是可以去除括号的。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL; #include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <bitset>
#include <stack>
const int maxn = 1e4 + ;
int op[maxn], del[maxn], DFN;
char str[maxn];
int lenstr;
void work() {
lenstr = strlen(str + );
stack<int> st;
while (!st.empty()) st.pop();
DFN++;
for (int i = ; i <= lenstr; ++i) {
if (str[i] == '(') st.push(i);
else if (str[i] == ')') {
int id = st.top();
st.pop();
op[id] = i;
}
}
str[] = str[lenstr + ] = '+';
for (int i = ; i <= lenstr; ++i) {
if (str[i] != '(') continue;
char pre, toNext;
int id = i - ;
while (id >= && del[id] == DFN) --id;
if (str[id] == '+' || str[id] == '(') pre = '+';
else pre = '*';
id = op[i] + ;
while (id <= lenstr && del[id] == DFN) ++id;
if (str[id] == '+' || str[id] == ')') toNext = '+';
else toNext = '*';
int be = i, en = op[i];
bool flag = true, flagadd = false;
for (int j = be + ; j <= en - ; ++j) {
if (str[j] == '(') {
j = op[j];
continue;
}
if (str[j] == '+') flagadd = true;
if (str[j] == '+' && pre == '*') {
flag = false;
break;
}
}
if (flag && (toNext != '*' || flagadd == false)) {
del[i] = del[op[i]] = DFN;
}
}
for (int i = ; i <= lenstr; ++i) {
if (del[i] == DFN) continue;
printf("%c", str[i]);
}
printf("\n");
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
while (scanf("%s", str + ) != EOF) work();
return ;
}
((x+y)+(z+1))y
(x+(y+z))
(x+(yz))
(x+y(x+t))
x+y+xt
a+(2b+c)(a+c)
a+(b+c)+(a+c)
xy((x+y))
xy((x+y)+z)
xy(y(x+y))
(a+c(d+e))((xyz))
(ab)(c)
Parenthesis UVALive - 4882 删除不必要的括号序列,模拟题 + 数据的更多相关文章
- 合法括号序列(dp+组合数学)
键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字符串恰好一个合法的括号序列. 每按一次左括号(,字符串末尾追加一个左括号( 每按一次右括号),字符串末尾追加一个右括号 ...
- 1021. Remove Outermost Parentheses删除最外层的括号
网址:https://leetcode.com/problems/remove-outermost-parentheses/ 使用栈的思想,选择合适的判断时机 class Solution { pub ...
- Leetcode 5016. 删除最外层的括号
5016. 删除最外层的括号 显示英文描述 我的提交返回竞赛 用户通过次数446 用户尝试次数469 通过次数456 提交次数577 题目难度Easy 有效括号字符串为空 ("&quo ...
- LeetCode 1021. 删除最外层的括号(Remove Outermost Parentheses)
1021. 删除最外层的括号 1021. Remove Outermost Parentheses 题目描述 有效括号字符串为空 ("")."(" + A + ...
- bzoj1095: [ZJOI2007]Hide 捉迷藏 线段树维护括号序列 点分治 链分治
这题真是十分难写啊 不管是点分治还是括号序列都有一堆细节.. 点分治:时空复杂度$O(n\log^2n)$,常数巨大 主要就是3个堆的初始状态 C堆:每个节点一个,为子树中的点到它父亲的距离的堆. B ...
- Catalan数,括号序列和栈
全是入门的一些东西.基本全是从别处抄的. 栈: 支持单端插入删除的线性容器. 也就是说,仅允许在其一端加入一个新元素或删除一个元素. 允许操作的一端也叫栈顶,不允许操作的一端也叫栈底. 数个箱子相叠就 ...
- [ Nowcoder Contest 165 #D ] 合法括号序列
\(\\\) \(Description\) 键盘上有三个键,敲击效果分别是: 在输出序列尾部添加一个左括号 在输出序列尾部添加一个右括号 删除输出序列尾部的第一个元素,若输出序列为空,则什么都不发生 ...
- [BZOJ3786] 星系探索(括号序列+Splay)
3786: 星系探索 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 2191 Solved: 644[Submit][Status][Discuss ...
- BZOJ4350: 括号序列再战猪猪侠
Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列 ...
随机推荐
- the art of seo(chapter four)
SEO Implementation:First Stages ***Development Platform and Information Architecture***1.Technology ...
- linux应用之nginx的安装及配置(centos)
Ubuntu/CentOS 系统上安装与配置Nginx 一.在线安装: Ubuntu:sudo apt-get install nginx CentOS: sudo yum install nginx ...
- 从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet,MobileNetV2
from:https://blog.csdn.net/qq_14845119/article/details/73648100 Inception v1的网络,主要提出了Inceptionmodule ...
- 精选Java面试题(二)
Java中的方法覆盖重写(Overriding)和方法重载(Overloading)是什么意思? Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况.与此相对,方法 ...
- nyoj 86 --位标记
nyoj 86 --位标记 点击打开题目链接 : 找球号(一) 这道题目很多解法,其他解法请参考 http://www.cnblogs.com/play ...
- HDU5919 Sequence2
传送门 这道题是主席树好题啊-- 题目大意:给定一个序列,每次给定一段区间,区间内所有不同的数第一次出现的位置排成一个序列,求这个序列的中位数. 其实求中位数并不是很难,只要我们能把这个序列中不同的数 ...
- compileSdkVersion, minSdkVersion 和 targetSdkVersion详解
API level API level是一个整数,它指的是我们使用的框架(Framework)的版本,也就是我们使用的sdk中的各个平台下的android.jar. 但是这个API level又和An ...
- css3单位em,rem,px,vw,vh等
昨天发现了个好用的方法去设置手机端的rem单位,在这里记录下. html{ font-size:calc(100vw/7.5);} 这是按照750的设计稿(也就是iphone6的设计稿). 100vw ...
- UVa 1641 ASCII Area (计算几何,水题)
题意:给定一个矩阵,里面有一个多边形,求多边形的面积. 析:因为是在格子里,并且这个多边形是很规则的,所以所有格子不是全属于多边形就是全不属于,或者一半,并且我们可以根据"/"和“ ...
- Django - 导出项目依赖库到 requirements.txt
两种方法: 虚拟环境: 使用 pip freeze pip freeze > requirements.txt # 这种方式推荐配合 virtualenv ,否则会把整个环境中的包都列出来. 只 ...