P5657 格雷码 题目
#include<iostream>
using namespace std;
inline int read(){
unsigned long long int x=0;
char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x;
}
int main(){
int n;
char a[70]={0};
unsigned long long int i=0,j=1,k;
int p=0,flag=0;
n=read(); k=read();
//cin>>n>>k;
for (int i=1;i<=n;i++) j=j*2;
j=j-1;
while(i<j){
unsigned long long int m=(i+j)>>1;
if (m>=k) {
a[p++]=flag+48;
j=m;
flag=0;
} else {
a[p++]=(1^flag)+48;
flag=1;
i=m+1;
}
// cout<<m<<endl;
}
for (int i=0;i<p;i++)
cout<<a[i];
return 0;
}
小小的问题:用cin最后一个点过不去,加了快读17,19数据点错误,不知道为什么