为什么RE(2)
查看原帖
为什么RE(2)
1043309
rqliushuangyu楼主2024/10/18 20:52
#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;
}

上次发的帖子没人回复,不会是代码换行太多了吧……上次是用平板操作的,不好弄,这次应该好了吧。。。我到底是哪里错了呢??大家能帮我看看吗?

2024/10/18 20:52
加载中...