听说灌水区有巨佬
  • 板块灌水区
  • 楼主Sukilin
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/9/2 19:24
  • 上次更新2023/11/2 23:49:04
查看原帖
听说灌水区有巨佬
959201
Sukilin楼主2023/9/2 19:24

P8815 40pts烂代码求hack,或求调

#include<bits/stdc++.h>
#define MAXLEN 1000999
using namespace std;
string s;
char hz[MAXLEN];
stack<char> st;
int andskip,orskip;
int p;
struct num{
	int n;
	int ast;
	int ost;
};
stack<num> cal;
int main(){
	cin>>s;
	for(int i=0;i<s.size();i++){
		if(s[i]=='1'||s[i]=='0'){
			hz[p++]=s[i];
		}
		if(s[i]=='('){
			st.push('(');
		}
		if(s[i]==')'){
			while(st.top()!='('){
				hz[p++]=st.top();
				st.pop();
			}
			st.pop();
		}
		if(s[i]=='&'){
			if(st.empty())
				st.push('&');
			else if(st.top()=='(')
				st.push('&');
			else{
				while(!st.empty()&&st.top()!='|'&&st.top()!='('){
					
					hz[p++]=st.top();
					st.pop();
					
				}
				st.push('&');
			}
		}
		if(s[i]=='|'){
			if(st.empty())
				st.push('|');
			else if(st.top()=='(')
				st.push('|');
			else{
				while(!st.empty()&&st.top()!='('){
					hz[p++]=st.top();
					st.pop();
					
				}
				st.push('|');
			}
		}
	}
	while(!st.empty()){
		hz[p++]=st.top(); 
		st.pop();
	}
	for(int i=0;i<p;i++){
		if(hz[i]=='1'||hz[i]=='0'){
			num q;
			q.n=hz[i]-'0';
			q.ast=q.ost=0;
			cal.push(q);
		}
		if(hz[i]=='&'){
			int b=cal.top().n;
			int bast=cal.top().ast;
			int bost=cal.top().ost;
			cal.pop();
			int a=cal.top().n;
			int aast=cal.top().ast;
			int aost=cal.top().ost;
			cal.pop();
			if(a==0){
				andskip++;
				orskip-=bost;
				andskip-=bast;
				num res;
				res.n=0;
				res.ast=aast+1;
				res.ost=aost;
				cal.push(res);
			}else{
				num ans;
				ans.n=a&b;
				ans.ast=ans.ost=0;
				cal.push(ans);
			}
		}
		if(hz[i]=='|'){
			int b=cal.top().n;
			int bast=cal.top().ast;
			int bost=cal.top().ost;
			cal.pop();
			int a=cal.top().n;
			int aast=cal.top().ast;
			int aost=cal.top().ost;
			cal.pop();
			if(a==1){
				orskip++;
				orskip-=bost;
				andskip-=bast;
				num res;
				res.n=1;
				res.ast=aast;
				res.ost=aost+1;
				cal.push(res);
			}else{
				num ans;
				ans.n=a|b;
				ans.ast=ans.ost=0;
				cal.push(ans);
			}
		}
	}
	cout<<cal.top().n<<'\n'<<andskip<<' '<<orskip;
	
	return 0;
}
2023/9/2 19:24
加载中...