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 ...
随机推荐
- 2019HDU多校第七场 HDU6646 A + B = C 【模拟】
一.题目 A + B = C 二.分析 比较考验码力的题. 对于$c$,因为首位肯定不为0,那么$a$或者$b$至少有一个最高位是和$c$平齐的,或者少一位(相当于$a$+$b$进位得到). 那么这里 ...
- Radar Scanner Gym - 102220G
题目链接:https://vjudge.net/problem/Gym-102220G 题意:在水平直角坐标系中有n个矩形,你可以将矩形沿着平行于X轴和Y轴水平移动,问至少经过几次移动可以使得所有的矩 ...
- 攻防世界 reverse parallel-comparator-200
parallel-comparator-200 school-ctf-winter-2015 https://github.com/ctfs/write-ups-2015/tree/master/sc ...
- Github Actions 还能做这些事
前言 最近公司内部项目的发布流程接入了 GitHub Actions,整个体验过程还是比较美好的:本文主要目的是对于没有还接触过 GitHub Actions的新手,能够利用它快速构建自动测试及打包推 ...
- Java例题_38 自定义函数求字符串长度
1 /*38 [程序 38 求字符串长度] 2 题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度. 3 */ 4 5 /*分析 6 * 1.从键盘得到一个字符串 7 ...
- pgrep - 命令
pgrep 命令格式:pgrep [选项] [模式] 选项 含义 -d <string> 指定输出分隔符 -l PID和进程名称 -a 列出PID和完整的命令行 -v 取反 -c 统计进程 ...
- DAOS 分布式异步对象存储|事务模型
DAOS API 支持分布式事务,允许将针对属于同一 Container 的对象的任何更新操作组合到单个 ACID 事务中.分布式一致性是通过基于多版本时间戳排序的无锁乐观并发控制机制提供的.DAOS ...
- Android+Spring Boot 选择+上传+下载文件
2021.02.03更新 1 概述 前端Android,上传与下载文件,使用OkHttp处理请求,后端使用Spring Boot,处理Android发送来的上传与下载请求.这个其实不难,就是特别多奇奇 ...
- 一次死锁导致CPU异常飘高的整个故障排查过程
目录 一.问题详情 top 命令截图 联系腾讯云排查 检查系统日志发现异常 二. 问题解析 三.问题原因 最终结论 四.扩展 进程的几种状态 马后炮 如何快速清理僵尸进程(Z) 内核参数相关 如何查看 ...
- CSS 还能这样玩?奇思妙想渐变的艺术
在之前的这篇文章 -- 一行 CSS 代码的魅力 中,我们介绍了一种使用一行 CSS 代码就能够生成的一种美妙(也许奇怪更合适)的背景. 本文,将继续介绍背景的一些有意思的知识,利用一些极小的单位,只 ...