B - Brackets Removal Gym - 101334B 模拟题

2024-02-13 16:58

本文主要是介绍B - Brackets Removal Gym - 101334B 模拟题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!




题意:

去括号,如果括号前有减号,那么里面变号

如果前面有除号,里面也要变号

题解:

模拟,括号包含的数据越少越先处理,从里去括号到外面

大概的思路:

取出所有匹配括号对的序号

然后按照间距从小到大处理括号


注意的是下面这组样例:

a/(b*(c+d/g))

a-(d+c*(d-h))


#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;#define MAXN 1010
char str[MAXN];
int visit[MAXN];struct position
{int l,r;int diff;
}a[MAXN];int cmp(const void *a,const void *b)
{position *x=(position *)a;position *y=(position *)b;return x->diff - y->diff;
}int judge(char ch)
{if(ch=='*'||ch=='/')return 1;return 0;
}int main()
{//freopen("in.txt","r",stdin);freopen("brackets.in","r",stdin);freopen("brackets.out","w",stdout);while(scanf("%s",str)!=EOF){int p=1,cnt=0;memset(a,-1,sizeof(a));memset(visit,0,sizeof(visit));int len=strlen(str);for(int i=0;i<len;i++){if(str[i]=='('){visit[i]=p++;a[cnt++].l=i;}else if(str[i]==')'){visit[i]=--p;for(int j=cnt-1;j>=0;j--){if(visit[a[j].l]==visit[i]&&a[j].r==-1)a[j].r=i,a[j].diff=a[j].r-a[j].l;}}}qsort(a,cnt,sizeof(a[0]),cmp);int left,right,flag;for(int i=0;i<cnt;i++){left=a[i].l;right=a[i].r;flag=1;for(int j=left+1;j<right;j++){if(visit[j]!=-3&&(str[j]=='-'||str[j]=='+')){flag=0;break;}}if(flag){visit[left]=visit[right]=-1;if(str[left-1]=='/'){for(int j=left+1;j<right;j++){if(visit[j]==-3)continue;if(str[j]=='*')str[j]='/';else if(str[j]=='/')str[j]='*';}}continue;}if(judge(str[left-1])==0&&judge(str[right+1])==0){visit[left]=visit[right]=-1;if(str[left-1]=='-'){for(int j=left+1;j<right;j++){if(visit[j]==-3)continue;if(str[j]=='-')str[j]='+';else if(str[j]=='+')str[j]='-';}}continue;}if(flag==0){for(int j=left+1;j<right;j++)if(visit[j]!=-1)visit[j]=-3;}}for(int i=0;i<len;i++){if(visit[i]!=-1)printf("%c",str[i]);}puts("");}return 0;
}


这篇关于B - Brackets Removal Gym - 101334B 模拟题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/706091

相关文章

机试算法模拟题 服务中心选址

题目描述 一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置,并希望能够以此为依据为新的服务中心选址:使服务中心到所有区域的距离的总和最小。 给你一个数组positions,其中positions[i] = [left, right] 表示第 i 个区域在街道上的位置,其中left代表区域的左侧的起点,right代表区域的右侧终点,假设服务中心的位置为loca

【UVA】1626-Brackets sequence(动态规划)

一道算是比较难理解的动规。 状态转移分2个: (用d[i][j]表示在i~j内最少需要添加几个括号,保持平衡) 1.如果s[i]和s[j]是一对括号,那么d[i][j] = d[i + 1][j - 1] 2.否则的话 d[i][j] = min(d[i][k],[k + 1][j]); 边界是d[i + 1][i] = 0; d[i][i] = 1; 13993644 162

Creating OpenAI Gym Environment from Map Data

题意:从地图数据创建 OpenAI Gym 环境 问题背景: I am just starting out with reinforcement learning and trying to create a custom environment with OpenAI gym. However, I am stumped with trying to create an enviro

【codeforces】gym 101137 K - Knights of the Old Republic【用最小生成树对图做集合dp】

题目链接:【codeforces】gym 101137 K - Knights of the Old Republic 考虑对图集合dp,一个连通块的dp值为两个连通块的值的和或者强制加一条新边后的最小值,取个最小值(边从小到大枚举,则强制加一条最大的边会导致连通块内较小的边一定都选,则会构成一个生成树)。用kruskal实现这个dp过程即可。 #include <bits/stdc++.h>

【codeforces】gym 101138 K. The World of Trains【前缀和优化dp】

题目链接:K. The World of Trains 记录一个横着的前缀dp和以及斜着的前缀dp,复杂度 O(n2) O(n^2) #include <bits/stdc++.h>using namespace std ;typedef pair < int , int > pii ;typedef long long LL ;#define clr( a , x ) memset (

How to user “Discrete“ object in openai-gym environments?

题意:怎样在 OpenAI Gym 环境中使用 “Discrete” 对象 问题背景: I am trying to create a Q-Learning agent for a openai-gym "Blackjack-v0" environment. I am trying to get the size of the observation space but its in

OpenAI Gym custom environment: Discrete observation space with real values

题意:OpenAI Gym 自定义环境:具有实数值的离散观测空间 问题背景: I would like to create custom openai gym environment that has discrete state space, but with float values. To be more precise, it should be a range of valu

HDU 1332(模拟题,电子数字)

#include <iostream>#include <cstring>using namespace std;#define MAXLENGTH 8void lcd_display (long size, long number){// 将number拆分为单个的数字。int digits[MAXLENGTH];memset (digits, -1, sizeof (

ural Brackets Sequence (dp)

http://acm.timus.ru/problem.aspx?space=1&num=1183 很经典的问题吧,看的黑书上的讲解。 设dp[i][j]表示i到j括号合法需要的最少括号数。 共有四种情况: s[i]s[j]配对,dp[i][j] = min( dp[i][j] ,  dp[i-1][j+1] ); s[i] = '('或'[' dp[i][j] = min( dp

GYM 100685 K

乱搞题 统计每一个不是magic word的单词,然后每个make_pair 然后按照公式计算答案。 因为这里是乱序的统计make_pair的情况,所以如果相邻的是相同的就会多统计一倍,在计算答案的是就要去掉,如果你保证字典序小的在前面,那就无所谓啦。 // whn6325689// Mr.Phoebe// http://blog.csdn.net/u01