80pts求助
查看原帖
80pts求助
80462
linyi楼主2021/4/16 13:49

2WA

#include<bits/stdc++.h>
#define rll register ll
#define inf 0x3f3f3f3f
#define MAXN 100001
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
#define ll long long
using namespace std;
inline ll read(){
	ll res=0,fs=1;
	char c=getchar();
	while(!(c>='0' && c<='9')){
		if(c=='-')fs=-1;
		c=getchar();
	}
	while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
	return res*fs;
}
map<string,ll> mp;
stack<ll> st;
signed main() {
	string s;
	ll num;
	while(1){
		cin>>s;
		if(s=="END_OF_FIRST_PART")break;
		cin>>num;
		mp[s]=num;
	}
	while(1){
		cin>>s;
		if(s=="0")break;
		s+=' ';
		string ts="";
		ll tn=0,ans=0,tt=0;
		bool IsKnown=1;
		for(rll i=0;i<s.size();i++){
			if(!st.empty())tt=st.top();
			if(s[i]>='a' && s[i]<='z' || s[i]>='A' && s[i]<='Z'){
				ts+=s[i];
				if(!(s[i+1]>='a' && s[i+1]<='z')){
					if(mp[ts]!=0)st.push(mp[ts]);
					else {
						IsKnown=0;
						break;
					}
					ts="";
				}
			}
			if(!st.empty())tt=st.top();
			if(s[i]>='0' && s[i]<='9'){
				tn=tn*10+s[i]-'0';
				if(!(s[i+1]>='0' && s[i+1]<='9')){
					ll tmp=st.top();
					st.pop();
					st.push(tmp*tn);
					tn=0;
				}
			}
			if(!st.empty())tt=st.top();
			if(s[i]=='('){
				st.push(-1);
			}
			if(s[i]==')'){
				ll sum=0;
				while(st.top()!=-1){
					sum+=st.top();
					st.pop();
				}
				st.pop();
				st.push(sum);
			}
			if(!st.empty())tt=st.top();
		}
		if(!IsKnown){
			cout<<"UNKNOWN"<<'\n';
			continue;
		}
		while(!st.empty()){
			ans+=st.top();
			st.pop();
		}
		cout<<ans<<'\n';
	}
    return 0;
}
2021/4/16 13:49
加载中...