P7073表达式求助,代码有注释
  • 板块灌水区
  • 楼主Flying_hp
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/1 20:59
  • 上次更新2024/10/2 08:05:22
查看原帖
P7073表达式求助,代码有注释
1123665
Flying_hp楼主2024/10/1 20:59

WA了,求帮助

#include<bits/stdc++.h>
#define ll long long
using namespace std;
stack<ll>q;//栈,模拟后缀表达式 
ll n,que,c;
map<string,ll>mp;//map映射Xi的值 
ll a[100010];
string s;
ll cal(string s){
	s+=" ";
	string sp="";//记录读入的字符串,如Xi 
	while(q.size())q.pop();
	for(ll i=0;i<s.size();i++){
		if(s[i]=='&'||s[i]=='|'){//&&运算或||运算 
			ll k=q.top();
			q.pop();
			ll p=q.top();
			q.pop();
			if(s[i]=='&'){
				q.push(k&&p);
			}
			else{
				q.push(k||p);
			}
		}
		else if(s[i]=='!'){//!运算 
			ll k=q.top();
			q.pop();
			q.push(!k);
		}
		else if(s[i]==' '){//压入值 
			if(sp.size()>0)
			q.push(mp[sp]);
			sp="";
		}
		else{
			sp+=s[i];
		}
	}
	return q.top();
}
string base="x";
signed main(){
	getline(cin,s);
	cin>>n;
	for(ll i=1;i<=n;i++){
		cin>>a[i];
		base="x";
		base+=(char)(i+'0');//Xi
		mp[base]=a[i];//映射 
	}
	cin>>que;
	while(que--){
		cin>>c;
		base="x";
		base+=(char)(c+'0');
		mp[base]=!mp[base];
		ll ans=cal(s);
		cout<<ans<<endl;
		mp[base]=!mp[base];
	}
	return 0;
}
2024/10/1 20:59
加载中...