RE 求调,悬关!
查看原帖
RE 求调,悬关!
842408
pangyuchen75楼主2023/9/28 15:12

不求满分,只求不RE!

#include <cstdio>
#include <iostream>
#include <vector>
#include <string>
#include <stack>
#define N 100005
using namespace std;

int n;
int digit;
string s, s1;
bool f;
vector <int> suffix;
bool data[N];
int q, change;

void inp() {
	getline(cin, s);
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i)
		scanf("%d", &data[i]);
	scanf("%d", &q);
}

bool isdigit(char ch) {
	return ch >= '0' && ch <= '9';
}

bool compute_suffix() {
	stack <bool> st;
	for(auto a : suffix) {
		if(a > 0)
			st.push(data[a]);
		else {
			bool x, y, z;
			if(a != -3) {
				y = st.top();
				st.pop();
				x = st.top();
				st.pop();
				if(a == -1)
					z = x & y;
				else
					z = x | y;
			} else {
				x = st.top();
				st.pop();
				z = !x;
			}
			st.push(z);
		}
	}
	
	return st.top();
}

void work() {
	for(int i = 0; i < s.size(); ++i) {
		if(s[i] == 'x')
			continue;
		if(isdigit(s[i])) {
			s1 += s[i];
			f = 1;
		} else if(f) {
			f = 0;
			s1 += ' ';
		} else if(s[i] != ' ')
			s1 += s[i];
	}
	for(int i = 0; i < s.size(); ++i) {
		if(isdigit(s1[i]))
			digit = digit * 10 + s1[i] - 48;
		else if(s1[i] == ' ') {
			suffix.push_back(digit);
			digit = 0;
		} else {
			if(s1[i] == '&')
				suffix.push_back(-1);
			else if(s1[i] == '|')
				suffix.push_back(-2);
			else if(s1[i] == '!')
				suffix.push_back(-3);
		}
	}
	while(q-- && scanf("%d", &change)) {
		data[change] ^= 1;
		printf("%d\n", compute_suffix());
		data[change] ^= 1;
	}
}

int main() {
	inp();
	work();
	
	return 0;
}
2023/9/28 15:12
加载中...