1 条题解

  • 2
    @ 2026-9-2 9:10:03

    数字从小到大遍历(02b10\to 2^b -1)。

    然后用 bool 数组来标记是否可以使用。如果当前这个数可以使用,则暴力的把海明距离 [1,d1][1,d-1] 的数字全部使用 DFS 暴力筛掉。

    然后就没了。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    bool qwq[1025],qwp[15];
    void dfs(int now,int b,int d){
    	if(!d){
    		qwq[now]=0;
    		return;
    	}
    	for(int i=0;i<b;i++){
    		if(qwp[i]) continue;
    		now^=(1<<i);
    		qwp[i]=1;
    		dfs(now,b,d-1);
    		qwp[i]=0;
    		now^=(1<<i);
    	}
    }
    signed main(){
    	cin.tie(0);
    	ios::sync_with_stdio(false);
    	int n,b,d;
    	cin>>n>>b>>d;
    	vector<int> v;
    	for(int i=0;i<=((1<<b)-1);i++) qwq[i]=1;
    	for(int i=0;i<=((1<<b)-1); i++){
    		if(qwq[i]){
    			v.push_back(i);
    			for(int j=1;j<d; j++) dfs(i,b,j);
    		}
    		if(v.size()==n) break;
    	}
    	for(int i=0;i<v.size();i++){
    		if(i%10==0&&i!=0) cout<<"\n";
    		cout<<v[i]<<" ";
    	}
    	return 0;
    }
    

    信息

    ID
    30
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    14
    已通过
    11
    上传者