95分,救救蒟蒻
查看原帖
95分,救救蒟蒻
1062499
_aminoac_楼主2024/9/16 10:04
#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ull n,k;
ull gl[70];
ull ci[70];
void init(){
	ci[0]=1;
	for(ull i=1;i<=64;i++){
		ci[i]=ci[i-1]*2;
	}
}
void prull(){
	for(ull i=n;i>=1;i--){
		cout<<gl[i];
	}
	return;
}
void gelei(ull num,ull now,ull last){//0前1后
	if(num<=1){
		if(last==3){
			if(k==1){
				cout<<0;return;
			}
			else{
				cout<<1;return;
			}
		}
		if(last==0){
			if(k==1){
				gl[1]=0;
				prull();
				return;
			}
			else{
				gl[1]=1;
				prull();
				return;
			}
		}
		if(last==1){
			if(k==1){
				gl[1]=1;
				prull();
				return;
			}
			else{
				gl[1]=0;
				prull();
				return;
			}
		}
	}
	if(now==0){
		if(last==0)
		gl[num]=0;
		if(last==1){
			gl[num]=1;
		}
		if(last==3){
			gl[num]=0;
		}
		if(k>ci[num-2]){
			now=1;
		}
		else{
			now=0;
		}
		gelei(num-1,now,0);
	}
	else{
		if(last==0)
		gl[num]=1;
		if(last==1){
			gl[num]=0;
		}
		if(last==3){
			gl[num]=1;
		}
		k-=ci[num-1];
		if(k>ci[num-2]){
			now=1;
		}
		else{
			now=0;
		}
		gelei(num-1,now,1);
	}
	return;
}
int main(){
//	freopen("code.in","r",stdin);
//	freopen("code.out","w",stdout);
	scanf("%llu%llu",&n,&k);
	k+=1;
	init();
	if(k>ci[n-1])
	gelei(n,1,3);
	else{
		gelei(n,0,3);
	}
	return 0;
}

最后一个点过不去,我的输出结果是 0000000000000000000000000000000000000000000000000000000000000001 答案是 1000000000000000000000000000000000000000000000000000000000000000

2024/9/16 10:04
加载中...