为什么RE?
查看原帖
为什么RE?
1043309
rqliushuangyu楼主2024/10/13 16:01
#include<bits/stdc++.h>

using namespace std;

int node[100020],nidx;//node[1]是根节点 

int lnxt[100020];//冒号左边节点编号 

int rnxt[100020];//冒号右边节点编号 

int wh[100020];// 1 是<,2是> 

int m,q;

string s;

int tree(int kt){
	++nidx;
	int val=0,wv=0;

	int tn=nidx;

 	for(int i=kt;i<s.size() ;i++){

 		if(s[i]=='?'){

			wh[tn]=wv;

			node[tn]=val;

			lnxt[tn]=nidx+1;

			int tmp=tree(i+1);

			rnxt[tn]=nidx+1;

			tmp=tree(tmp);

 			//递归 

 			return tmp;

		}

		if(s[i]==':'){

			node[tn]=val;

			//cout<<"i+1="<<i+1<<endl;

			//到尽头了(当前这一个),返回下一个位置

			return i+1;

		}

		if(s[i]=='<'){

			wv=1;

		}

		else if(s[i]=='>'){

			wv=2;

		}

		if(s[i]>='0'&&s[i]<='9'){

			val*=10;

			val+=s[i]-'0';

		}

	}

}

int run(int nod,int x){//按顺序遍历树 ,经测试,正确 

	int n=node[nod];

	if(!wh[nod]){

		return n;

	}

	if(wh[nod]==1)

		if(x<n)run(lnxt[nod],x);

		else run(rnxt[nod],x);

	else

		if(x>n)run(lnxt[nod],x);

		else run(rnxt[nod],x);

} 

int main(){

	cin>>m>>q;

	cin>>s;

	s+=':';

	tree(0);

	

	for(int i=0;i<q;i++){

		int op;

		cin>>op;

		cout<<run(1,op)<<endl;

	}

	return 0;

}

我用建二差叉树的方法,总感觉哪里不对。。。哪里呢?为什么RE??

2024/10/13 16:01
加载中...