HDU - 3347 Calculate the expression — 模拟 + map存变量
题意:从输入开始,1.输入样例数;2.然后输入一组样例中的行数n;3.前n-1行为定义变量(之间使用空格隔开),只需要map存进去就可以了(这里有覆盖的情况,故使用mp["s"] = "***"的方法赋值,因为insert的方法如果里面存在的话,插不进入数值);4.然后就是最后一行输入计算式子(之间使用空格隔开)。
思路:我使用的字符流的方法分割的的字符串,因为题中说了使用空格隔开的;
变量的储存使用map就可以,在最后一行输入计算式子之后,同样使用字符流分割的方法,分割出来,判断是加法、减法、变量、数 字(正负)。 我做的时候就是以为都是加法,所以WA了一次。
1 #include <iostream>
2 #include <algorithm>
3 #include <sstream>
4 #include <string>
5 #include <vector>
6 #include <queue>
7 #include <map>
8
9 #include <cstdio>
10 #include <cstring>
11 #include <cmath>
12 using namespace std;
13
14 // 讲字符串转换为数字(这里的函数名起得不合适)
15 long long asksum(string str, int s) {
16 int len = str.length();
17 long long sum = 0;
18 for (int i = s; i < len; ++i) {
19 sum = sum*10+(str[i]-'0');
20 // cout << "qwe" << endl;
21 }
22 // cout << sum << "+++++" << endl;
23 if (s)
24 return sum*-1;
25 return sum;
26 }
27
28 int main() {
29 // ios::sync_with_stdio(false);
30 // cin.tie(NULL);
31 // cout.tie(NULL);
32
33 int t, n;
34 string str, s;
35 map<string, int> mp;
36 // 储存变量
37 cin >> t;
38 while (t--) {
39 cin >> n;
40 getchar();
41 mp.clear();
42 // 每一次清空上一次残留的变量
43 long long sum = 0;
44 for (int i = 0; i < n; ++i) {
45 getline(cin, str);
46 if (i == n-1) { // 在输入计算式的时候直接出结果,也可以讲变量和计算式分开
47 int flag = 1;
48 // 这个flag就是用来标记是加法还是减法的。
49 stringstream ss(str);
50 while (ss >> s) {
51 if (s[0] >= '0' && s[0] <= '9') {
52 sum += asksum(s, 0)*flag;
53 // cout << "+" << endl;
54 } else if (s[0] == '-' && s[1] >= '0' && s[1] <= '9'){
55 sum += asksum(s, 1)*flag;
56 // cout << "-" << endl;
57 } else if (s == "+") {
58 flag = 1;
59 } else if (s == "-") {
60 flag = -1;
61 } else if (s[0] >= 'a' && s[0] <= 'z') {
62 sum += mp[s]*flag;
63 }
64 }
65 } else {
66 stringstream ss(str);
67 string var;
68 int num = 0, zhi;
69 while (ss >> s) {
70 num++;
71 // 因为变量赋值只有三部分,所以这里只需要去第一次和第三次即可
72 if (num == 1) {
73 var = s;
74 } else if (num == 3) {
75 if (s[0] == '-')
76 zhi = asksum(s, 1);
77 else
78 zhi = asksum(s, 0);
79 }
80 }
81 mp[var] = zhi;
82 }
83 // cout << mp.size() << " = size" << endl;
84 }
85 // cout << "sum = " << sum << endl;
86 cout << sum << endl;
87 }
88
89 return 0;
90 }
hdu 3347
关于字符串分流的知识点:字符串分割
HDU - 3347 Calculate the expression — 模拟 + map存变量的更多相关文章
- 组合数学第一发 hdu 2451 Simple Addition Expression
hdu 2451 Simple Addition Expression Problem Description A luxury yacht with 100 passengers on board ...
- HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)
HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...
- js模拟Map对象,实现key---value
js模拟Map对象,实现key---value 根据java中map的属性,实现key----value保存 function Map() { var struct = function (key, ...
- BZOJ 2157: 旅游 (结构体存变量)
用结构体存变量好像确实能提高运行速度,以后就这么写数据结构了 Code: #include <cstdio> #include <algorithm> #include < ...
- HDU 6342.Problem K. Expression in Memories-模拟-巴科斯范式填充 (2018 Multi-University Training Contest 4 1011)
6342.Problem K. Expression in Memories 这个题就是把?变成其他的使得多项式成立并且没有前导零 官方题解: 没意思,好想咸鱼,直接贴一篇别人的博客,写的很好,比我的 ...
- HDU 5948 Thickest Burger 【模拟】 (2016ACM/ICPC亚洲区沈阳站)
Thickest Burger Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- HDU 5920 Ugly Problem 【模拟】 (2016中国大学生程序设计竞赛(长春))
Ugly Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- HDU 5873 Football Games 【模拟】 (2016 ACM/ICPC Asia Regional Dalian Online)
Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- HDU 4814 Golden Radio Base 模拟
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4814 题目大意: 把一个正整数表示为φ进制, φ = (1+√5)/2 . 且已知: 1. φ + 1 ...
随机推荐
- MongoDB学习--环境搭建记录
Mongo安装教程,参考英文官网 基本命令, 索引的引用,索引基于地理位置的数据, win10 64位 系统中安装虚拟机 win10 系统中安装虚拟机VMwareWorkstation11 并安装 L ...
- beego框架panic: 'GetSecurityInf' method doesn't exist in the controller CorporateInfcontroller问题解决
在使用beego框架时,出现类似于panic: 'GetSecurityInf' method doesn't exist in the controller CorporateInfcontroll ...
- protobuf基于java和javascript的使用
目录 ProtoBuf介绍 整理下java和JavaScript的例子 demo测试 java作为服务端+客户端测试 客户端前端调用示例 项目地址 参考 ProtoBuf介绍 ProtoBuf 是go ...
- Spring Boot 自动装配原理
Spring Boot 自动装配原理 Spring Boot 在启动之前还有一系列的准备工作,比如:推断 web 应用类型,设置初始化器,设置监听器,启动各种监听器,准备环境,创建 applicati ...
- 攻防世界 reverse elrond32
tinyctf-2014 elrond32 1 int __cdecl main(int a1, char **arg_input) 2 { 3 if ( a1 > 1 && c ...
- ES 终于可以搜到”悟空哥“了!
Elasticsearch 搜索引擎内置了很多种分词器,但是对中文分词不友好,所以我们需要借助第三方中文分词工具包. 悟空哥专门研究了下 ik 中文分词工具包该怎么玩,希望对大家有所帮助. 本文主要内 ...
- thinkphp 5.1框架利用及rce分析
前言 上个学期钻研web渗透的时候接触过几个tp的框架,但那时候还没有写blog的习惯,也没有记录下来,昨天在做ctf的时候正好碰到了一个tp的框架,想起来就复现一下 正文 进入网站,标准笑脸,老tp ...
- 幻灯片放映模式切换windows terminal背景图片
目录 幻灯片放映模式切换windows terminal背景图片 脚本功能 开发需求 使用技术 操作说明 使用示例 查看帮助 输入参数使用 脚本详情 引用参考 幻灯片放映模式切换windows ter ...
- 【图像处理】OpenCV+Python图像处理入门教程(七)图像形态学操作
图像形态学主要从图像内提取分量信息,该分量信息通常对表达图像的特征具有重要意义.例如,在车牌号码识别中,能够使用形态学计算其重要特征信息,在进行识别时,只需对这些特征信息运算即可.图像形态学在目标视觉 ...
- java面试-JVM常用的基本配置参数有哪些?
1.-Xms 初始大小内存,默认为物理内存 1/64,等价于 -XX:InitialHeapSize 2.-Xmx 最大分配内存,默认为物理内存的 1/4,等价于 -XX:MaxHeapSize 3. ...