贼小萌新求助!
查看原帖
贼小萌新求助!
658786
STUDENT00楼主2022/10/30 10:24

模板栈,结果样例没过。。。

#include<bits/stdc++.h>
#define pii pair<bool,pair<int,int> >
#define same(a,b) !(a^b)
#define diff(a,b) a^b
using namespace std;
char str[1000010];
stack<pii> st1;
stack<char> st2;
int good(char c){
	if(same(c,38)) return 2;
	if(same(c,124)) return 1;
	return 0;
}
void make(){
	pii a=st1.top();
	st1.pop();
	pii b=st1.top();
	st1.pop();
	char c=st2.top();
	st2.pop();
	if(same(c,38)){
		if(!a.first) st1.push(make_pair(0,make_pair(0,a.second.second+b.second.second)));
		else st1.push(make_pair(a.first&&b.first,make_pair(a.second.first+b.second.first,a.second.second+b.second.second)));
	}else{
		if(a.first) st1.push(make_pair(1,make_pair(a.second.first+b.second.first,1)));
		else st1.push(make_pair(a.first||b.first,make_pair(a.second.first+b.second.first,a.second.second+b.second.second)));
	}
} 
int main(){
	scanf("%s",str);
	int len=strlen(str);
	for(int i=0;i<len;i++){
		char c=str[i];
		if(same(c,48)) st1.push(make_pair(0,make_pair(0,0)));
		else if(same(c,49)) st1.push(make_pair(1,make_pair(0,0)));
		else if(same(c,40)) st2.push(40);
		else if(same(c,41)){
			while(diff(st2.top(),40)) make();
			st2.pop();
		}else{
			while(!st2.empty()&&good(st2.top())>=good(c)) make();
			st2.push(c);
		}
	}
	while(!st2.empty()) make();
	pii ans=st1.top();
	if(ans.first) putchar(49);
	else putchar(48);
	printf("\n%d %d",ans.second.first,ans.second.second);
	return 0;
}
2022/10/30 10:24
加载中...