2022csp-j 15求条
查看原帖
2022csp-j 15求条
836448
stylus楼主2024/12/13 22:29
#include<bits/stdc++.h>
#define int long long
using namespace std;
void read(int &x){
	x=0;bool f=0;char ch=getchar();
	while(ch>'9'||ch<'0'){
		if(ch=='-')f=1;
		ch=getchar();
	}do{x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}while(ch>='0'&&ch<='9');
	x=f?-x:x;
}
int n,c,a,b;
string s;
signed main(){
	cin>>s,n=s.size();
	for(int i=0;i<n;i++){
		if(s[i]=='&'){
			int k=i-1,g=0;
			while(s[k]==')')k--,g++;
			while(g)k--,g-=s[k]=='(';
			s.insert(k,"("),i++,n++,k=i+1;
			while(s[k]=='(')k++,g++;
			while(g)k++,g-=s[k]==')';
			s.insert(k+1,")"),n++,i++;
		}
	}
	for(int i=0;i<n;i++){
		if(s[i-1]=='('&&s[i+1]==')')s.insert(i+2,s.substr(i,1)),s.erase(i-1,3),n-=2,i--;
		if(s[i+1]=='&'&&s[i]=='0'){
			int k=i+2,g=0;
			while(s[k]=='(')k++,g++;
			while(g)k++,g-=s[k]==')';
			s.erase(i+1,k-i),i--,a++;
		}if(s[i+1]=='|'&&s[i]=='1'){
			int k=i+2,g=0;
			while(s[k]=='(')k++,g++;
			while(g)k++,g-=s[k]==')';
			s.erase(i+1,k-i),i--,b++;
		}
	}
	for(int i=0;i<n;i++){
		if(s[i-1]=='('&&s[i+1]==')')s.insert(i+2,s.substr(i,1)),s.erase(i-1,3),n-=2,i--;
		if(s[i]=='0'&&s[i+1]=='|')s.erase(i,2),i--,n-=2;
		if(s[i]=='|'&&s[i+1]=='0')s.erase(i,2),i--,n-=2;
		if(s[i]=='1'&&s[i+1]=='&')s.erase(i,2),i--,n-=2;
		if(s[i]=='&'&&s[i+1]=='1')s.erase(i,2),i--,n-=2;
	}cout<<s<<endl<<a<<' '<<b;
	return 0;
}
2024/12/13 22:29
加载中...