【bzoj1561】[JSOI2009]去括号
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define maxn 100001 using namespace std; char s[maxn];
bool w[maxn];
int S[maxn],n,top,tt,T; bool pd(int l,int r)
{
for (int i=l;i<=r;i++)
{
if (s[i]=='(' && !w[i])
tt++;
if (s[i]==')' && !w[i])
tt--;
if (!tt && (s[i]=='+' || s[i]=='-'))
return 0;
}
return 1;
} int main()
{
scanf("%d",&T);
while (T--)
{
memset(s,0,sizeof(s));
memset(w,0,sizeof(w));
memset(S,0,sizeof(S));
scanf("%s",s+1);
n=strlen(s+1);
for (int i=1,nn;i<=n;i++)
{
if (s[i]=='(')
S[++top]=i;
else if (s[i]==')')
{
nn=S[top--];
if (s[nn-1]=='/'||s[nn-1]=='*'||s[i+1]=='*'||s[i+1]=='/')
{
if (pd(nn+1,i-1))
{
w[nn]=w[i]=1;
if (s[nn-1]=='/')
{
for (int j=nn+1;j<i;j++)
{
if (s[j]=='(' && !w[j])
tt++;
if (s[j]==')' && !w[j])
tt--;
if (!tt)
{
if (s[j]=='*')
s[j]='/';
else if (s[j]=='/')
s[j]='*';
}
}
}
}
}
else
{
w[nn]=w[i]=1;
if (s[nn-1]=='-')
for (int j=nn+1;j<i;j++)
{
if (s[j]=='(' && !w[j])
tt++;
if (s[j]==')' && !w[j])
tt--;
if (!tt)
{
if (s[j]=='+')
s[j]='-';
else if (s[j]=='-')
s[j]='+';
}
}
}
}
}
for (int i=1;i<=n;i++)
if (!w[i])
printf("%c",s[i]);
printf("\n");
}
return 0;
}
【bzoj1561】[JSOI2009]去括号的更多相关文章
- 51Nod 1684 子集价值 (平方和去括号技巧)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1684 题意: 新建一个位运算,求所有子集通过这个位运算后的答案的平方和是 ...
- POJ1690 简单运算去括号
题目大意: 给定一串只含加减和括号的运算,去掉没用的括号和空白字符输出 这里其实只要去找当前括号前面那个运算符是不是减号,如果是减号且这个括号内出现过运算符说明这个括号应该存在 #include &l ...
- bat文件去括号
@Echo Off&SetLocal ENABLEDELAYEDEXPANSION FOR %%a in (*) do ( set "name=%%a" set " ...
- 【jsoi】第一季 [略]精简题解
UPD:好像有两道题的代码逃跑了?= =就先不找了,反正都是水题. 精简题解系列第四弹.(其实也不是那么精简啊= =) [JSOI2008]最大数maxnumber 单点修改,区间最大值查询,裸线段树 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Java实现带括号优先级的计算器
这个计算器不仅能够进行四则运算,还支持添加括号进行优先级计算,例如下面算式: 10+(2*16-20/5)+7*2=52 Java源代码: import java.awt.BorderLayout; ...
- 带括号的四则混合运算的算符优先算法-----java实现
1:主方法 package com.baidu; import java.text.NumberFormat;import java.util.ArrayList;import java.util.S ...
- 使用python开发一个能够计算带括号的复杂表达式的计算器(只支持加减乘除)
使用到了模块re,正则,字典等 # 实现简单的加减乘除括号等运算 # Calculator def calculator(expression): print(expression) import r ...
- python 简易计算器(只能计算加减乘除和括号)
import re # 格式化字符串函数(消除一些错误的格式) def format_string(string): # 一系列的替换语句 string = string.replace(" ...
随机推荐
- 安装weblogic时,运行configure.cmd报错、闪退、无法创建域
直接运行configure.cmd时在jar包加载完成时,不提示创建域的过程,而是直接退出程序 命令行: cd /d F:\00uep_rfs\wls1212_dev\wls12120 切换至解压路径 ...
- POJ 1006-Biorhythms,中国剩余定理,学信安的路过!
Biorhythms 我竟然1A了, 终于从一天的浑噩中找回点自信了.人生第一次做中国剩余定理的题 ...
- [Go]链表的相关知识
切片有着占用内存少喝创建便捷等特点,但它本质上还是数组.切片的一大好处是可以通过窗口快速地定位并获取或者修改底层数组中的元素.不过当删除切片中的元素的时候就没那么简单了.元素复制一般是免不了的,就算只 ...
- [codeforces551E]GukiZ and GukiZiana
[codeforces551E]GukiZ and GukiZiana 试题描述 Professor GukiZ was playing with arrays again and accidenta ...
- HDU 4499
题目大意: N*M的棋盘上摆了一些棋子,在剩余位置上尽可能多的摆上炮,使所有炮不能互吃 dfs+回溯 #include <iostream> #include <cstdio> ...
- Codeforces Round #277 (Div. 2 Only)
A:SwapSort http://codeforces.com/problemset/problem/489/A 题目大意:将一个序列排序,可以交换任意两个数字,但要求交换的次数不超过n,输出任意一 ...
- poj 3155 二分+最小割求实型最小割(最大密集子图)
/* 最大密集子图子图裸题 解法:设源点s和汇点t 根据胡波涛的<最小割模型在信息学中的应用> s-每个点,权值为原边权和m, 每个点-t,权值为m+2*g-degree[i], 原来的边 ...
- Notification通知创建
Notification通知创建 由于通知是一个远程视图,所以创建通知在状态栏显示需要用到三个主要的对象: 一.PendingIntent对象,用来承载Intent对象的,Intent对象主要是定义通 ...
- 理解流方式上传和form表单上传
流方式上传: $post_input = 'php://input'; $save_path = dirname( __FILE__ ); $postdata = file_get_contents( ...
- POJ 1094 Sorting It All Out【拓扑排序】
题目链接: http://poj.org/problem?id=1094 题意: 给定前n个字母的大小关系,问你是否 根据前xxx个关系得到上升序列 所有关系都无法确定唯一的一个序列 第xxx个关系导 ...