您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: