当前位置: 首页 > news >正文

hdu 4192(表达式求值)

题意:给一个表达式当中有一些变量,然后告诉你一些数字你可以任意排列,问能不能求出要求的结果。

思路:由于变量数目较小所以直接全排列枚举即可,然后用栈处理表达式。

代码如下:

 1 /**************************************************
 2  * Author     : xiaohao Z
 3  * Blog     : http://www.cnblogs.com/shu-xiaohao/
 4  * Last modified : 2014-06-28 21:50
 5  * Filename     : hdu_4192.cpp
 6  * Description     : 
 7  * ************************************************/
 8 
 9 #include <iostream>
10 #include <cstdio>
11 #include <cstring>
12 #include <cstdlib>
13 #include <cmath>
14 #include <algorithm>
15 #include <queue>
16 #include <stack>
17 #include <vector>
18 #include <set>
19 #include <map>
20 #define MP(a, b) make_pair(a, b)
21 #define PB(a) push_back(a)
22 
23 using namespace std;
24 typedef long long ll;
25 typedef pair<int, int> pii;
26 typedef pair<unsigned int,unsigned int> puu;
27 typedef pair<int, double> pid;
28 typedef pair<ll, int> pli;
29 typedef pair<int, ll> pil;
30 
31 const int INF = 0x3f3f3f3f;
32 const double eps = 1E-6;
33 const int LEN = 10100;
34 int n, res, a, num[LEN], len;
35 char str[LEN];
36 map<char, int> mp;
37 
38 struct P{
39     int x;
40     char c;
41     P(){}
42     P(int _x){x = _x;}
43     P(char _c){c = _c;}
44 };
45 
46 int top;
47 int ch(char c){
48     if(!mp.count(c)) mp[c] = top++;
49     return mp[c];
50 }
51 
52 bool calc(){
53     stack<P> s;
54     for(int i=0; i<len; i++){
55         if(str[i] == '(') continue;
56         else if(str[i] == '+' || str[i] == '-' || str[i] == '*'){
57             s.push(P(str[i]));
58         }else if(str[i] >= 'a' && str[i] <= 'z'){
59             s.push(P(num[ch(str[i])]));
60         }else if(str[i] == ')'){
61             P a = s.top();s.pop();
62             P op = s.top();s.pop();
63             P b = s.top();s.pop();
64             switch(op.c){
65                 case '+': b.x+=a.x;break;
66                 case '-': b.x-=a.x;break;
67                 case '*': b.x*=a.x;break;
68             }
69             s.push(b);
70         }
71     }
72     return s.top().x == res;
73 }
74 
75 bool solve(){
76     sort(num, num + n);
77     do{
78         if(calc()) return true;
79     }while(next_permutation(num, num + n));
80     return false;
81 }
82 
83 int main()
84 {
85 //    freopen("in.txt", "r", stdin);
86 
87     while(scanf("%d", &n)!=EOF){
88         mp.clear();top = 0;
89         for(int i=0; i<n; i++)
90             scanf("%d", &num[i]);
91         scanf("%d", &res);
92         if(!n && !res) break;
93         scanf("%s", &str);
94         len = strlen(str);
95         if(solve()) puts("YES");
96         else puts("NO");
97     }
98     return 0;
99 }
View Code

 

转载于:https://www.cnblogs.com/shu-xiaohao/p/3813968.html

相关文章:

  • linux误删文件恢复工具-extundelete
  • 最近一直忙于学习平面设计
  • 易宝典文章——怎样重新连接并恢复 Exchange Server 2013已删除的用户邮箱
  • 级数
  • 远程入侵原装乘用车(上)
  • MySQL 5.5.22 单机多实例配置实践
  • SPOJ 1812 Longest Common Substring II
  • 北大ACM题库习题分类与简介(转载)
  • js整理
  • docker-dockerfile使用
  • ios按钮点击后翻转效果
  • 为什么说IBM公司未来云计算中成功的关键是开源
  • 序列化 serialVersionUID
  • windows下的套接字IO模型
  • 第一周考试总结
  • 0x05 Python数据分析,Anaconda八斩刀
  • AHK 中 = 和 == 等比较运算符的用法
  • JavaScript服务器推送技术之 WebSocket
  • java小心机(3)| 浅析finalize()
  • Js基础知识(一) - 变量
  • Nacos系列:Nacos的Java SDK使用
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Zsh 开发指南(第十四篇 文件读写)
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 前端存储 - localStorage
  • 写给高年级小学生看的《Bash 指南》
  • 昨天1024程序员节,我故意写了个死循环~
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​Spring Boot 分片上传文件
  • #include<初见C语言之指针(5)>
  • #NOIP 2014#Day.2 T3 解方程
  • $.ajax()
  • $.ajax()参数及用法
  • (12)目标检测_SSD基于pytorch搭建代码
  • (C#)一个最简单的链表类
  • (done) 两个矩阵 “相似” 是什么意思?
  • (四)图像的%2线性拉伸
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • ..回顾17,展望18
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net 发送邮件
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET建议使用的大小写命名原则
  • .NET使用存储过程实现对数据库的增删改查
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • @GlobalLock注解作用与原理解析
  • @RestControllerAdvice异常统一处理类失效原因
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C++参考]拷贝构造函数的参数必须是引用类型
  • [ESP32] 编码旋钮驱动
  • [leetcode] 四数之和 M