70pts 求助
查看原帖
70pts 求助
231543
bloodstalk楼主2022/9/11 10:56

用的是一个类似二分的思想,我感觉应该是失精度了/dk

#include<bits/stdc++.h>
//#define int long long
#define ll long long
#define next nxt
#define re register
#define il inline
using namespace std;
int max(int x,int y){return x > y ? x : y;}
int min(int x,int y){return x < y ? x : y;}

int n;
unsigned long long k;

il int read()
{
	int f=0,s=0;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) f |= (ch=='-');
	for(; isdigit(ch);ch=getchar()) s = (s<<1) + (s<<3) + (ch^48);
	return f ? -s : s;
}

int main()
{
	cin >> n >> k;
	int flag = 0;
	unsigned long long l = 0 , r = pow(2,n)-1 , mid = 0;
	while((n--)>0)
	{
		mid = (l+r) >> 1;
		if(k <= mid)
		{
			cout << flag;
			flag = 0;
			r = mid;
		} 
		else
		{
			cout << (flag^1);
			flag = 1;
			l = mid+1;
		}
	}
	return 0;
}
2022/9/11 10:56
加载中...