此代码时间复杂度是多少
  • 板块学术版
  • 楼主fe117
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/1/27 18:51
  • 上次更新2024/1/27 20:38:52
查看原帖
此代码时间复杂度是多少
1025217
fe117楼主2024/1/27 18:51
#include <iostream>
#include <cmath>
using namespace std;
string s;
long long andsum,orsum;
long long sumlast[1000005];
int find(char ch,int l,int r){
	unsigned long long res=0;
	for(long long i=r;i>=l;i--){
		if(s[i]==')')res++;
		if(s[i]=='(')res--;
        //if(res<0)return -1;
		if(s[i]==ch&&res==0)return i;
	}
	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';
    if(l>r){
        cout<<"aaaaaa"<<r;
        return -2;
    }
	long long fff;
	char wf;
	if(sumlast[r]!=0){
	    fff=sumlast[r];
	}
	else{
	    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;
	cout<<dfs(0,s.length()-1)<<endl<<andsum<<" "<<orsum;
	return 0;
}

我感觉是O(n)O(n)

2024/1/27 18:51
加载中...