\(AC \)難しいことではありませんが、それだけであまりにも神経質な試験を受けた\(95pts \)
この道の私の地方の選挙が開始
\(説明\)
タイトル面
グレイコードは、符号化され(N- \)\:グレイコードは以下のように構成されているビット\(N-1 \)主要グレーコードのビット( "0" \)\ \(^ {0--2 N-1} -1 \)ビットは、その後、\(N-1 \)有力で、逆グレイコードビット\( "1" \)\(2 ^ {N-1 } - 2 ^ N-1 \)ビット特別な、\(1 \)はグレイコードビットである(0 \)\ Q \(N \)グレイコードセクションビット\(kは\)一方が何でありますか
\(解決\)
、クエリの同様のデータ構造上のグレイコードを見つけるプロセスツリー構造を形成するために、グレイコードを書く考えてみましょう\(K \)に起因する位置、\(kは\)からである(\ 0)\我々ので、最初に、始まります彼は\(+ 1 \)
仮説は現在のセクションと見なさ\(I \)ビットで、その結果、\(MID = 2 ^ {I-1} \) 、もし\(K <=ミッド\)補体(0 \ \ )、または\(K-MID = \) 、塗りつぶし\(1 \) 、注意\(1 \)ランキングフリップので、並べ替え逆の順序で次のk =半ばK:\(
+ 1 \) 数に注意を払いますポイント:
\(1 \)開くために\(ULL \を)で、(ULL \)\の下に\(X << 63 \)この計算は間違っている、独自の高速パワーを書く
\(2 \)極端なデータ\(K = 2 ^ {64 } -1 \) であれば\(K ++ \)破裂する\(ULL \)となる\(0 \)ので、\(K \)私たちのプログラムの中になることはありません(0 \)\出会いので、\(= 0 \ K) 、逆はある(K = 1 \)\直接的に、特別審査員。
\(コード\)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#define re register
#define ull unsigned long long
using namespace std;
inline ull read()
{
ull x=0,f=1; char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
string s;
ull n,k,mid;
ull quickpow(ull a,ull b)
{
ull ans=1;
while(b)
{
if(b&1) ans=ans*a;
a=a*a;
b>>=1;
}
return ans;
}
int main()
{
n=read(),k=read();
mid=quickpow(2,n-1);
k++;
while(mid)
{
if(k>mid||k==0)
{
s+='1';
if(!k) k=1;
else k-=mid,k=mid-k+1;
}
else s+='0';
mid>>=1;
}
cout<<s;
return 0;
}