http://acm.hdu.edu.cn/showproblem.php?pid=3347
C++ Map秒杀
附上代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<map> #include<string.h> #include<string> #include<iostream> #include<ctype.h> using namespace std; map<string,int>mp; map<string,int>::iterator it; int main() { //freopen("in.txt","r",stdin); int t; scanf("%d",&t); while(t--) { mp.clear(); int sum=0; int n; scanf("%d",&n); char s[22]; int val; //string ss; for(int i=0;i<n-1;i++) { scanf("%s = %d",s,&val); //ss=s; mp[s]=val; } char str[22]; int flag=1; while(scanf("%s ",str),str[0]!='?') { if(str[0]=='+') flag=1; else if(str[0]=='-'&&!isdigit(str[1])) flag=-1; else if(str[0]=='=') continue; //printf("flag=%d ",flag); if(isalpha(str[0])) { it=mp.find(str); if(it!=mp.end()) { if(flag==1) sum+=it->second; else if(flag==-1) sum-=it->second; else sum=sum; } // printf("sum=%d ",sum); } else if(isdigit(str[0])) { int len=strlen(str); int num=0,temp=1; for(int i=len-1;i>=0;i--) { num+=temp*(str[i]-'0'); temp*=10; } if(flag==1) sum+=num; else if(flag==-1) sum-=num; else sum=sum; // printf("sum=%d ",sum); } else if(str[0]=='-'&&isdigit(str[1])) { int len=strlen(str); int num=0,temp=1; for(int i=len-1;i>=1;i--) { num+=temp*(str[i]-'0'); temp*=10; } num=-num; if(flag==1) sum+=num; else if(flag==-1) sum-=num; else sum=sum; //printf("sum=%d ",sum); } } printf("%d ",sum); } return 0; }