因为这个题目说明了优先级的规定,所以可以从左到右直接运算,在处理嵌套括号的时候,可以使用递归的方法,给定每一个括号的左右边界,伪代码如下:

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(递归处理嵌套括号)的更多相关文章

  1. 数据结构——POJ 1686 Lazy Math Instructor 栈的应用

    Description A math instructor is too lazy to grade a question in the exam papers in which students a ...

  2. POJ 1686 Lazy Math Instructor (模似题+栈的运用) 各种坑

    Problem Description A math instructor is too lazy to grade a question in the exam papers in which st ...

  3. Lazy Math Instructor

      Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3721   Accepted: 1290 Description A m ...

  4. poj 1684 Lazy Math Instructor(字符串)

    题目链接:http://poj.org/problem?id=1686 思路分析:该问题为表达式求值问题,对于字母使用浮点数替换即可,因为输入中的数字只能是单个digit. 代码如下: #includ ...

  5. POJ 1686 Lazy Math Instructor(栈)

    原题目网址:http://poj.org/problem?id=1686 题目中文翻译: Description 数学教师懒得在考卷中给一个问题评分,因为这个问题中,学生会为所问的问题提出一个复杂的公 ...

  6. 递归遍历嵌套结构(多层List)中的元素 ------Python

    读Python基础教程(第二版)后看到了这么一个东西,就是利用递归遍历嵌套结构中的元素. 上代码: #encoding:UTF-8 def flatten(nested): try: #不要迭代类似字 ...

  7. python 递归展开嵌套的序列(生成器用法)

    任何使用yield语句的函数都称为生成器.调用生成器函数将创建一个对象,该对象通过连续调用next()方法(在python3中是__next__())生成结果序列. next()调用使生成器函数一直运 ...

  8. Python之旅Day3 文件操作 函数(递归|匿名|嵌套|高阶)函数式编程 内置方法

    知识回顾 常见五大数据类型分类小结:数字.字符串.列表.元组.字典 按存值个数区分:容器类型(列表.字典.元组) 标量原子(数字.字符串) 按是否可变区分:可变(列表.字典) 不可变(数字.字符串.元 ...

  9. 递归、嵌套for循环、map集合方式实现树形结构菜单列表查询

    有时候, 我们需要用到菜单列表,但是怎么样去实现一个菜单列表的编写呢,这是一重要的问题. 比如我们需要编写一个树形结构的菜单,那么我们可以使用JQuery的zTree插件:http://www.tre ...

随机推荐

  1. vultr vps发布多用户管理功能

    中国用户购买海外vps,有一个麻烦之处是付款环节,可能你没有visa信用卡,vultr和digitalocean和linode这类vps不支持支付宝,给一些朋友带来不便.由此产生的vps代购行业,其实 ...

  2. web通知

    <html> <head> <title>桌面通知</title> <meta name="description" cont ...

  3. 解决 .NET Core 中 GetHostAddressesAsync 引起的 EnyimMemcached 死锁问题

    在我们将站点从 ASP.NET + Windows 迁移至 ASP.NET Core + Linux 的过程中,目前遇到的最大障碍就是 —— 没有可用的支持 .NET Core 的 memcached ...

  4. Asp.Net MVC 在后台获取PartialView、View文件生成的字符串

    在Asp.net MVC的实际开发中,有时需要在后台代码中获取某个View 或者 PartialView 生成的字符串,示例如下: 1. 将View文件输出为字符串: /// <summary& ...

  5. windows7所有版本

    windows7所有版本迅雷地址下载集合(含32位和64位) Windows7 SP1旗舰版 32位官方原版下载: ed2k://|file|/cn_windows_7_ultimate_with_s ...

  6. sql语句-排序后加入序号再运算判断取想要的项

    select a.id as aid,b.id as bid,a.city,a.cang,a.sid,a.time as atime,b.time as btime,a.price as aprice ...

  7. mysql出现Can't connect to MySQL server on 'localhost' (10061)的解决方法

    网上搜索的一: 今天把mysql数据库拷贝到另外一台机上,结果连不上,报“Can't connect to MySQL server on 'localhost' (10061)“错误 到网上sear ...

  8. ob_get_contents()

    ob_start();//buf1 echo 'multiple'; ob_start();//buf2 echo 'bufferswork'; $buf2 = ob_get_contents(); ...

  9. python2.6.6在centos6.4下安装

    1.wget http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tar.bz2 2. tar xvjf Python-2.6.6.tar.bz2 ...

  10. .htaccess文件url重写小记

    .htaccess文件url重写 当上一条规则匹配 并转换后 符合下一条规则的 继续下一条的匹配转换 RewriteRule ^shangpin-([0-9a-zA-Z]+)/category-([0 ...