UVALive 2056 Lazy Math Instructor(递归处理嵌套括号)
因为这个题目说明了优先级的规定,所以可以从左到右直接运算,在处理嵌套括号的时候,可以使用递归的方法,给定每一个括号的左右边界,伪代码如下:
int Cal(){
if(括号) sum += Cal();
else sum += num;
return sum;
}
但是这个题目着实坑了我一下,见过WA了,没见过TLE呢……我因为没有看到有空格这个条件,无线TLE,又是消除函数又是改用数组模拟栈,其实就是读入出错和忘记了处理空格,改了之后,成功AC了。代码如下:
#include<iostream>
#include<cmath>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;
#define maxn 100
int pos[maxn],st[maxn];
int Cal(int id,const char *a){
int sum = ,tmp;
for(int i = id+;i < pos[id];i++){
if(a[i] == '('){
tmp = Cal(i,a);
if(a[i-]=='(' || a[i-]=='+') sum += tmp;
else if(a[i-]=='-') sum -= tmp;
else if(a[i-]=='*') sum *= tmp;
i = pos[i];
}
else if((a[i]>='a'&&a[i]<='z')||(a[i]>=''&&a[i]<='')){
if(a[i]>='a'&&a[i]<='z') tmp = (a[i]-'a'+);
else tmp = a[i]-'';
if(a[i-]=='(' || a[i-]=='+') sum += tmp;
else if(a[i-]=='-') sum -= tmp;
else if(a[i-]=='*') sum *= tmp;
i++;
}
}
return sum;
}
int getnum(const char *a){
memset(pos,,sizeof(pos));
memset(st,,sizeof(st));
int len = strlen(a);
int top = ;
for(int i = ;i < len;i++)
{
if(a[i]=='(') st[top++] = i;
if(a[i]==')') {
pos[st[--top]] = i;
}
}
int sum = ,tmp;
for(int i = ;i < len;i++){
if(a[i]=='('){
tmp = Cal(i,a);
if(i == || a[i-]=='+')
sum += tmp;
else if(a[i-] == '-') sum -= tmp;
else if(a[i-] == '*') sum *= tmp;
i = pos[i];
}
else if((a[i]>='a'&&a[i]<='z')||(a[i]>=''&&a[i]<='')){
if(a[i]>='a'&&a[i]<='z') tmp = (a[i]-'a'+);
else tmp = a[i]-'';
if(i == || a[i-]=='+')
sum += tmp;
else if(a[i-] == '-') sum -= tmp;
else sum *= tmp;
i++;
}
}
//printf("the num = %d\n",sum);
return sum;
}
int main()
{
int t,lena,lenb,num1,num2,tot;
char a[maxn],b[maxn];
scanf("%d",&t);
getchar();
while(t--){
gets(a);
lena = strlen(a);
tot = ;
for(int i = ;i < lena;i++){
if(a[i]==' ') continue;
else b[tot++] = a[i];
}
b[tot] = '\0';
num1 = getnum(b);
gets(a);
lena = strlen(a);
tot = ;
for(int i = ;i < lena;i++){
if(a[i]==' ') continue;
else b[tot++] = a[i];
}
b[tot] = '\0';
num2 = getnum(b);
if(num1 == num2) puts("YES");
else puts("NO");
}
return ;
}
UVALive 2056 Lazy Math Instructor(递归处理嵌套括号)的更多相关文章
- 数据结构——POJ 1686 Lazy Math Instructor 栈的应用
Description A math instructor is too lazy to grade a question in the exam papers in which students a ...
- POJ 1686 Lazy Math Instructor (模似题+栈的运用) 各种坑
Problem Description A math instructor is too lazy to grade a question in the exam papers in which st ...
- Lazy Math Instructor
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3721 Accepted: 1290 Description A m ...
- poj 1684 Lazy Math Instructor(字符串)
题目链接:http://poj.org/problem?id=1686 思路分析:该问题为表达式求值问题,对于字母使用浮点数替换即可,因为输入中的数字只能是单个digit. 代码如下: #includ ...
- POJ 1686 Lazy Math Instructor(栈)
原题目网址:http://poj.org/problem?id=1686 题目中文翻译: Description 数学教师懒得在考卷中给一个问题评分,因为这个问题中,学生会为所问的问题提出一个复杂的公 ...
- 递归遍历嵌套结构(多层List)中的元素 ------Python
读Python基础教程(第二版)后看到了这么一个东西,就是利用递归遍历嵌套结构中的元素. 上代码: #encoding:UTF-8 def flatten(nested): try: #不要迭代类似字 ...
- python 递归展开嵌套的序列(生成器用法)
任何使用yield语句的函数都称为生成器.调用生成器函数将创建一个对象,该对象通过连续调用next()方法(在python3中是__next__())生成结果序列. next()调用使生成器函数一直运 ...
- Python之旅Day3 文件操作 函数(递归|匿名|嵌套|高阶)函数式编程 内置方法
知识回顾 常见五大数据类型分类小结:数字.字符串.列表.元组.字典 按存值个数区分:容器类型(列表.字典.元组) 标量原子(数字.字符串) 按是否可变区分:可变(列表.字典) 不可变(数字.字符串.元 ...
- 递归、嵌套for循环、map集合方式实现树形结构菜单列表查询
有时候, 我们需要用到菜单列表,但是怎么样去实现一个菜单列表的编写呢,这是一重要的问题. 比如我们需要编写一个树形结构的菜单,那么我们可以使用JQuery的zTree插件:http://www.tre ...
随机推荐
- android listen
android监听机制,应该是一种观察者模式. 摘抄网上教程,观察者模式的结构如下: 其中涉及的角色有: ● 抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如A ...
- varnish屏蔽control+F5导致缓存失效
刚刚接触Varnish缓存,对静态资源进行缓存.目前问题,当浏览器Control+F5刷新页面,导致缓存失效. 参照:http://zhangxugg-163-com.iteye.com/blog/1 ...
- python--sum函数--sum(axis=1)
平时用的sum应该是默认的axis=0 就是普通的相加,当加入axis=1以后就是将一个矩阵的每一行向量相加. 例如: >>>import numpy as np >>& ...
- mysql数据库root密码忘记的修改
注:此方法root的密码可以设置成功,但是重新开启服务时可能会出现中断的异常. 1.修改MySQL的root密码,需要先关闭MySQL的服务 2.进入命令行窗口,进入MySQL的安装路径bin目录下, ...
- 正则表达式 替换 <img > 标签
/** * 正则表达式过滤<img > 标签 * @param str * @return */ public static String cutOutImgPrefix(String s ...
- sqlserver 经典入门基础书籍
1.SQLServer2005T-SQL数据库设计 作者:胡百敬等著 ISBN:10位[7121053632]13位[9787121053634] 出版社:电子工业出版社 出版日期:2008-1-1 ...
- js控制日期选择框datetime-local和select的展开
注: js控制元素展开不受元素css属性的限制,例如opacity,z-index等 1. 使用js控制日期选择框的展开 ios: document.querySelector(".targ ...
- Python - 字母算术谜题
如: SEND + MORE == MONEY 9567 + 1085 == 10652 字母和数字一一对应 首字母不为0 解法: import re from itertools import ...
- 笔记整理--Linux多线程
Unix高级环境编程系列笔记 (2013/11/17 14:26:38) Unix高级环境编程系列笔记 出处信息 通过这篇文字,您将能够解答如下问题: 如何来标识一个线程? 如何创建一个新线程? 如何 ...
- 微信接口开发1--向微信发送请求--获取access_token
//随便放置一个php文件在服务器上.执行该方法--调用模拟get提交---到微信-->获得微信返回的access_token 不建议自己编写模拟get提交方法. 建议直接导入微信框架LaneW ...