HDU 3347 Calculate the expression By Assassin 模拟水题
2017-05-02 09:55
399 查看
题目大意
You may find it’s easy to calculate the expression such as: a = 3 b = 4 c = 5 a + b + c = ? Isn’t it?
Input
The first line contains an integer stands for the number of test cases. Each test case start with an integer n stands for n expressions will follow for this case. Then n – 1 expressions in the format: [variable name][space][=][space][integer] will follow. You may suppose the variable name will only contain lowercase letters and the length will not exceed 20, and the integer will between -65536 and 65536. The last line will contain the expression you need to work out. In the format: [variable name| integer][space][+|-][space][variable name| integer] …= ? You may suppose the variable name must have been defined in the n – 1 expression and the integer is also between -65536 and 65536. You can get more information from the sample.
Output
For each case, output the result of the last expression.
Sample Input
3 4 aa = 1 bb = -1 aa = 2 aa + bb + 11 = ? 1 1 + 1 = ? 1 1 + -1 = ?
Sample Output
12 2 0
题目分析
乍一看挺难,但是注意看题!!!前n-1行格式是固定的,一定是给变量赋值,最后一行就是变量+常数的加减,比较简单,注意每次考虑运算的符号即可。变量可以用 map记录(开始把题目想太复杂了,所以记录一下简单的做法)
#include<bits/stdc++.h> using namespace std; map<string,int>mp; int string_to_int(string s){ //字符串 int sum=0,pos=0,sign=0; if(s[pos]=='-'){ sign=1; pos++; } for(;pos<s.size();pos++){ sum=sum*10+s[pos]-'0'; } if(sign==1){ return -sum; } else { return sum; } } int main(){ int t,n; string variablename,c,integer; scanf("%d",&t); while(t--){ scanf("%d",&n); mp.clear(); for(int i=1;i<n;i++){ cin>>variablename>>c>>integer; mp[variablename]=string_to_int(integer); } int sign=0; long long ans=0; while(cin>>c){ if(c.size()==1){ if(c[0]=='-'){ sign=1; continue; } else if(c[0]=='+'){ sign=0; continue; } } if(c[0]=='=')continue; if(c[0]=='?')break; if(c[0]>='a'&&c[0]<='z'){ if(sign==1){ ans-=mp[c]; } else { ans+=mp[c]; } } else { if(sign==1){ ans-=string_to_int(c); } else { ans+=string_to_int(c); } } } cout<<ans<<endl; } return 0; }
相关文章推荐
- HDU-1036 Average is not Fast Enough!(模拟水题)
- HDU 5867 Water problem (模拟水题)
- HDU 5095 Linearization of the kernel functions in SVM(模拟, 水题)
- hdu 4891 模拟水题
- hdu 5003 模拟水题
- hdu 4891 模拟水题
- hdu 5083 有坑+字符串模拟水题
- 【HDU 5532 Almost Sorted Array】水题,模拟
- HDU 1056 HangOver 模拟 水题
- HDU 5099 Comparison of Android versions(上海邀请赛模拟水题)
- hdu 5083 有坑+字符串模拟水题
- hdu 5007 Post Robot【模拟】水题
- HDU 3635 Dragon Balls 并查集水题 模拟
- HDU1282+水题+模拟
- HDU-1032 The 3n+1 problem 模拟问题(水题)
- HDU-5835 Danganronpa(模拟水题)
- HDU 1228 模拟水题
- hdu 4530 小Q系列故事——大笨钟 模拟水题
- hdu 1117 Booklet Printing(模拟 分类 水题)
- hdu 1491(Octorber 21st)(模拟水题)