考场代码,两个点不过,不知道为啥
查看原帖
考场代码,两个点不过,不知道为啥
997325
lch1218楼主2024/12/12 22:19
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+10;//定义 
int n,ans,dq[N],l;
char cnt[N];
void qc(){//去重函数 
	for(int i=1;i<=n;i++){
		if(cnt[i]=='L' || cnt[i]=='R'){//把L和R的下表放进数组 
			dq[++l]=i;
		}
		if(cnt[i]=='U'){
			if(l>0){//去重 
				cnt[dq[l]]=' ';
				l--;
				cnt[i]=' ';
			}
		}
	}
}
void Up(){//父节点 
	if(ans!=1){
		if(ans%2){
			ans=(ans-1)/2;
		}
		else	ans/=2;
	}
}
void Left(){//左儿子 
	ans*=2;
}
void Right(){//右儿子 
	ans=ans*2+1;
}
void dfs(char fx){//游走 
	if(fx=='U'){//调用,下同 
		Up();
		return;
	}
	if(fx=='L'){
		Left();
		return;
	}
	if(fx=='R'){
		Right();
		return;
	}
}
signed main(){
	cin>>n>>ans;
	for(int i=1;i<=n;i++){
		cin>>cnt[i];
	}
	qc();
	for(int i=1;i<=n;i++){//最后去重后一起统计,不会越界 
		if(cnt[i]!=' ')	dfs(cnt[i]);
	}
	cout<<ans;//答案 
	return 0;
} 

后面看了看题解,发现思路和我一样,并且我的代码能AC所以洛谷官方能不能加强数据?或者有没有神犇能指出缺陷?

2024/12/12 22:19
加载中...