问一下关于 PJ T3 的问题
  • 板块学术版
  • 楼主Eason_AC
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/11/8 18:05
  • 上次更新2023/11/5 08:27:01
查看原帖
问一下关于 PJ T3 的问题
112917
Eason_AC楼主2020/11/8 18:05

RT,为什么我的代码所有样例(包括大样例)全过,在洛谷上全 TLE?应该也有 30 pts 的啊 qwq

麻烦各位大佬看一下谢谢qwq

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <stack>
#define ll long long
#define F(i, a, b) for(int (i) = (a); (i) <= (b); ++(i))
#define R(i, a, b) for(int (i) = (a); (i) >= (b); --(i))
using namespace std;

inline int getint() {
	int f = 1, x = 0; char c = getchar();
	while(!isdigit(c)) {if(c == '-') f = -1; c = getchar();}
	while(isdigit(c)) {x = x * 10 + c - '0'; c = getchar();}
	return x * f;
}
#define Rint getint()
inline ll getll() {
	ll f = 1, x = 0; char c = getchar();
	while(!isdigit(c)) {if(c == '-') f = -1; c = getchar();}
	while(isdigit(c)) {x = x * 10 + c - '0'; c = getchar();}
	return x * f;
}
#define Rll getll()

string s;
int n, q, x, a[100007], len;

void getans() {
	stack<int> q;
	int cur = 0;
	while(cur < len) {
		if(s[cur] == 'x') {
			cur++;
			int num = 0;
			while(isdigit(s[cur])) num = num * 10 + s[cur++] - '0';
			q.push(a[num]);
			cur++;
		} else if(s[cur] == '|'){
			int x1 = q.top(); q.pop();
			int x2 = q.top(); q.pop();
			q.push(x1 | x2);
			cur += 2;
		} else if(s[cur] == '&') {
			int x1 = q.top(); q.pop();
			int x2 = q.top(); q.pop();
			q.push(x1 & x2);
			cur += 2;
		} else if(s[cur] == '!') {
			int x = q.top(); q.pop();
			q.push(!x);
			cur += 2;
		}
	}
	int ans = q.top();
	printf("%d\n", ans);
}

int main() {
	getline(cin, s);
	len = s.size();
	n = Rint;
	F(i, 1, n)	a[i] = Rint;
	q = Rint;
	while(q--) {
		x = Rint;
		a[x] = 1 - a[x];
		getans();
		a[x] = 1 - a[x];
	}
}
2020/11/8 18:05
加载中...