社区讨论

大佬们抽空帮看看呗

学术版参与者 4已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@lodqt5w0
此快照首次捕获于
2023/10/31 11:01
2 年前
此快照最后确认于
2023/11/07 01:32
2 年前
查看原帖
P5657 格雷码 题目链接
CPP
#include <iostream>
#include <bits/stdc++.h>
#define int unsigned long long

using namespace std;
inline int read(){
    int x=0;
    char ch = getchar();
    while(ch<'0'||ch>'9')  {
        ch = getchar();
    }

    while(ch>='0'&&ch<='9') {
        x = (x << 1) + (x << 3) + (ch ^ '0');
        ch = getchar();
    }
    return x;
}
signed main(){
    int n;
    char a[1001]={0};
    int i=0,j=1,k;
    int p=0,flag=0;
    n=read(); 
    k=read();
    for (int i=1;i<=n;i++) {
        j *= 2;
    }
    j--;n--;
    int m=(i+j)>>1;
    int max=0-1;
    while(i<j&&n!=max){
        //cout<<m<<" "<<n<<" "<<i<<" "<<j<<endl; 
        if (m>=k) {
            a[p++]=flag+'0';
            j=m;
            flag=0;
            m-=pow(2,n-1);
            n--;
        } else {
            a[p++]=(1^flag)+'0';
            flag=1;
            i=m+1;
            m+=pow(2,n-1);
            n--;
        }
    }

    for (int i=0;i<p;i++) {
        cout<<a[i];
    } 
    return 0;
} 
为什么还会有数据过不了呢

回复

6 条回复,欢迎继续交流。

正在加载回复...