您的位置:首页 > 其它

【模拟学习】 HDU3347 保持思路,肯定AC

2018-03-17 21:08 232 查看

#include <iostream>
#include <string.h>
#include <cstdio>
#include <map>
#include <string>
using namespace std;
int getnum(string a)
{
int ret = 0;
int fuflag = 0;
int i = 0;
if(a[0] =='-')
{
fuflag = 1;
i = 1;
}
for(i;i < a.size();i++)
{
ret *= 10;
ret += (a[i] - '0');
}
//cout<<ret<<endl;
if(fuflag)ret = -ret;
return ret;
}
int main()
{
int t,n,num;
int outflag;
string a,b;
char c;
scanf("%d",&t);
map<string,int> mp;
while(t--)
{
scanf("%d",&n);
for(int i = 1;i < n;i++)
{
outflag = 1;
while(outflag && cin>>b)
{
if(b[0] == '=')
{
scanf("%d",&num);
outflag = 0;
}
else
{
a = b;
}
}
mp[a] = num;
}
outflag = 1;
int mathflag = 1;
int ret = 0;
while(outflag && cin>>a)
{
if(a[0] == '+')
{mathflag = 1;}
else if(a[0] == '-' && a.size() == 1)mathflag = 0;
else if(a[0] == '=')
{
cin>>b;
outflag = 0;
printf("%d\n",ret);
}
else if(!(a[0] >= 'a' && a[0] <= 'z'))
{
if(mathflag)ret += getnum(a);
else ret -= getnum(a);
}
else
{
if(mathflag)ret += mp[a];
else ret -= mp[a];
}
}
}

return 0;
}
 
HDU3347
其实这个题并不太难,只不过今天是模拟赛,然后比赛的时候,1.认为这个题好做或者能做2.就要取沉着冷静得去想
看到这个题,读完提后,很好的一点就是赋值和求值是分开的,也就是两个小问题得处理,赋值和求值,赋值好说:以空格为分割符,检测到等号就进行map赋值,easy
求值呢??要判断+ 与 - 也要判断求值中对于字符串输入得时候如果是数字该如何转化得问题,处理完这些,这个题目就ac了,所以要明确我要去处理什么问题,思路一直清晰,除了算法高不高效得考察外,哪有不A得道理~~
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐