洛谷在线IDE自测没问题,交上去就RE
  • 板块学术版
  • 楼主fe117
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/1/27 21:45
  • 上次更新2024/1/28 02:17:39
查看原帖
洛谷在线IDE自测没问题,交上去就RE
1025217
fe117楼主2024/1/27 21:45

代码:

#include <iostream>
#include <cmath>
using namespace std;
string s;
long long andsum,orsum;
int lastand[1000005];
int lastor[1000005];
int l1[500005],l2[500005];
int find(char ch,int l,int r){
	if(ch=='|'){
        if(lastor[r]>=l){
            return lastor[r];
        }
        return -1;
    }
    else if(ch=='&'){
        if(lastand[r]>=l){
            return lastand[r];
        }
        return -1;
    }
}
int dfs(long long l,long long r){
	//cout<<"dfsed "<<l<<" "<<r;
    //if(!kuohaopipei(l,r)){cout<<"aisdygqiufyg";}
	/*if(s[l]=='('&&s[r]==')'&&kuohaopipei2(l,r)){
		//if(l==ll)ll++;
		//if(r==rr)rr--;
		int ret=dfs(l+1,r-1);
		return ret;
	}*/
	if(l==r)return s[l]-'0';
	long long fff;
	char wf;
    fff=find('|',l,r);
	if(fff<1){
		fff=find('&',l,r);
        if(fff>=1){
            wf='&';
        }
        else{
            if(s[l]=='('&&s[r]==')'){
                return dfs(l+1,r-1);
            }
        }
    }
    else{
        wf='|';
    }
    //cout<<" find:"<<fff<<endl;
	int dfl,dfr;
	dfl=dfs(l,fff-1);
	//if(l==0&&r==4)cout<<wf;
	//if(l==1&&r==3)cout<<"sd"<<dfl<<"  "<<dfr<<"gf";
	//if(l==1&&r==3)cout<<wf<<"kzisgviys";
	if(wf=='|'){
		//cout<<"dd"<<dfl<<"w";
		if(dfl==1){
			orsum++;
			return 1;
		}
        else{
		    dfr=dfs(fff+1,r);
		    return dfl|dfr;
        }
	}
	if(wf=='&'){
		if(dfl==0){
			andsum++;
			return 0;
		}
        else{
		    dfr=dfs(fff+1,r);
		    return dfl&dfr;
        }
	}
    return -1;
}

signed main(){
	cin>>s;
    //cout<<kuohaopipei();return 0;
    int s_i=0,res;
	for(int i=0;i<s.length();i++){
	    if(s[i]=='|'){
	        l1[res]=i;
	    }
        if(s[i]=='&'){
            l2[res]=i;
        }
        if(s[i]=='('){
            res++;
        }
        if(s[i]==')'){
            res--;
        }
        lastand[i]=l2[res];
        lastor[i]=l1[res];
	}
    /*for(int i=0;i<s.length();i++){
        cout<<lastand[i]<<" "<<lastor[i]<<endl;
    }*/
	cout<<dfs(0,s.length()-1)<<endl<<andsum<<" "<<orsum;
	return 0;
}

题目

2024/1/27 21:45
加载中...