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是合法的括号序列 ...
随机推荐
- FLV文件格式解析(转)
FLV(Flash Video)是现在非常流行的流媒体格式,由于其视频文件体积轻巧.封装播放简单等特点,使其很适合在网络上进行应用,目前主流的视频网站无一例外地使用了FLV格式.另外由于当前浏览器与F ...
- PHP上传文件时,文件过大$_FILES为空
在php中判断上传文件的大小,但是文件一但过大,print_r($_FILES);的值就变为null了,有时候大家会遇到这么一个问题,上传小文件时,PHP能正常获取到,但是文件一超过8M就变为空了,我 ...
- 配置JDK和Tomcat环境变量(转)
1.安装JDK 安装好JDK后,再配置JDK的环境变量:在“我的电脑”上点右键—>“属性”—>“高级”—> “环境变量(N)”. 新建系统变量JAVA_HOME:C:/Program ...
- 什么是HTTP协议?
HTTP协议(超文本传输协议)位于TCP/IP协议栈的应用层.传输层采用面向连接的TCP HTTP请求详细过程
- codeforces 702B B. Powers of Two(水题)
题目链接: B. Powers of Two time limit per test 3 seconds memory limit per test 256 megabytes input stand ...
- vue中的 v-if VS v-show
相同点:都是动态显示DOM元素. 不同点:1.v-if是动态的向DOM树内添加或者删除DOM元素:v-show是通过设置DOM元素的display样式属性控制显隐: 2.v-if切换有一个局部编译/卸 ...
- 文件的打开函数第一类--fopen()
fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式); 其中, “文件指针名”必须是被说明为FILE 类型的指针变量: “文件名”是被打开文件的 ...
- Gulp-webpack简单应用
1.配置环境: 在 webstorm 的控制台中 (1) cnpm install --save-dev gulp (2) cnpm install --save-dev gulp-w ...
- initWithFrame 与 initWithCoder 、awakeFromNib 的方法理解笔记
1. initWithFrame方法是什么? initWithFrame方法用来初始化并返回一个新的视图对象,根据指定的CGRect(尺寸). 当然,其他UI对象,也有initWithFrame方法, ...
- E20180712-hm
directive n. 指令; <美>命令,训令,指令; 方针;