蒟蒻菜鸡代码求调
查看原帖
蒟蒻菜鸡代码求调
1350908
gjrBJ楼主2025/2/4 13:54

样例未过,运行错误......

支持壶关!

#include<bits/stdc++.h>
using namespace std;
struct node {
	int vl;
	node *fa, *br, *l, *r;
}a[1000010], b[1000010];
string s;
stack<int> num, idd;
stack<char> op;
int n, q, x[1000010], id;
int main() {
	getline(cin, s);
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> x[i];
	}
	string t = "";
	int iid = 1;
	for (int i = 0; i < s.size(); i++) {
		if (s[i] == ' ') {
			if (t == "&" || t == "|" || t == "!") {
				if (t == "&" && num.size() > 1) {
					int num1 = num.top(); num.pop();
					int num2 = num.top(); num.pop();
					int id1 = idd.top(); idd.pop();
					int id2 = idd.top(); idd.pop();
					if (id1 == 11451400 || id2 == 11451400) continue;
					a[id1].br = &a[id2];
					a[id2].br = &a[id1];
					a[id1].fa = a[id2].fa = &b[iid];
					b[iid].l = &a[id1], b[iid].r = &a[id2];
					a[id1].vl = num1, a[id2].vl = num2;
					b[iid].vl = 2;
					idd.push(11451400);
					num.push(num1 & num2);
                    iid++;
				}
				if (t == "|" && num.size() > 1) {
					int num1 = num.top(); num.pop();
					int num2 = num.top(); num.pop();
					int id1 = idd.top(); idd.pop();
					int id2 = idd.top(); idd.pop();
					if (id1 == 11451400 || id2 == 11451400) continue;
					a[id1].br = &a[id2];
					a[id2].br = &a[id1];
					a[id1].fa = a[id2].fa = &b[iid];
					b[iid].l = &a[id1], b[iid].r = &a[id2];
					a[id1].vl = num1, a[id2].vl = num2;
					b[iid].vl = 3;
					idd.push(11451400);
					num.push(num1 | num2);
                    iid++;
				}
				if (t == "!" && num.size() > 0) {
					int num1 = num.top(); num.pop();
					int id1 = idd.top(); idd.pop();
					if (id1 == 11451400) continue;
					a[id1].br = nullptr;
					a[id1].fa = &b[iid];
					b[iid].l = &a[id1], b[iid].r = nullptr;
					a[id1].vl = num1;
					b[iid].vl = 4;
					idd.push(11451400);
					num.push(!num1);
                    iid++;
				}
			} else {
				int nu = 0;
				for (int j = 1; j < t.size(); j++) {
					nu = nu * 10 + (t[j] - '0');
				}
				idd.push(nu); 
				num.push(x[nu]);
			}
			t = "";
		} else t += s[i];
	}
	cin >> q;
	int val = num.top();
	while (q--) {
		cin >> id;
        int vv = a[id].fa->vl;
		if (vv == 2) {
			if ((a[id].br->vl & (!a[id].vl)) != (a[id].br->vl & a[id].vl)) {
				cout << !val << endl;
			} else cout << val << endl;
    	} else if (vv == 3) {
			if ((a[id].br->vl | (!a[id].vl)) != (a[id].br->vl | a[id].vl)) {
			    cout << !val << endl;
			} else cout << val << endl;
		} else {
			cout << !val << endl;
		}
	}
	return 0;
}

本人蒟蒻蒟蒻对指针不太理解,大佬不要介意哈~

2025/2/4 13:54
加载中...