处女座与汉明距离

2024-06-17 20:32
文章标签 距离 汉明 处女座

本文主要是介绍处女座与汉明距离,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【题目描述】

定义两个数之间的汉明距离为两个数异或值的二进制中1的个数。

问是否存在一个 0-2^(n-1) 的排列 a,使得相邻两个数 ai 和 ai+1 的汉明距离均为 m,a2^n 和 a1 也算相邻。

【输入描述】

一行,两个数n和m
2<=n<=20, 1<=m<n

【输出描述】

如果存在这样的排列,第一行输出"YES",下面2n行,每行一个整数,输出这个排列。如果有多组答案,输出任意一组即可
如果不存在,输出”NO”

【样例】

示例1

输入
2 1
输出
YES
0
1
3
2

思路:

首先判断奇偶性,当 m 为偶数是,肯定不可能的,而当 m 为奇数时,需要进行构造,可以使用格雷码

对于格雷码,从 n 位变为 n+1 位,就是把后一半的数首位变为 1,后 n 位进行关于前一半的镜像排列,这样可以保证相连两个数的汉明距离为 m

对于 m=1 时,使用格雷码即可,从而可以构造出 m=n-1 的情况,只需将偶数行取反即可,因此可以先构造 (m+1,m) 的情况,然后从 m+1 递推到 n

【源代码】

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define PI acos(-1.0)
#define E 1e-6
#define MOD 1000000007
#define INF 0x3f3f3f3f
#define N 2000000
#define LL long long
using namespace std;
int n,m;
int a[N];
int b[N];
int calculate(int x){//计算x转为二进制后1的个数int res=0;while(x){res++;x=x&(x-1);}return res;
}int main(){scanf("%d%d",&n,&m);if (m%2==0){printf("NO\n");return 0;}else{//构造格雷码a[0]=0; a[1]=1;for(int i=1;i<n;i++)for(int j=(1<<i);j<(1<<(i+1));j++)a[j]=(1<<i)^(a[(1<<(i+1))-1-j]);if(m==1){//等于1的情况printf("YES\n");for(int i=0;i<(1<<n);i++)printf("%d\n",a[i]);}else{//大于1的情况printf("YES\n");for(int i=0;i<(1<<(m+1));i++){if(i%2==0)//偶数取反b[i]=a[i];elseb[i]=a[i]^((1<<(m+1))-1);}for(int i=m+1;i<n;i++){int p=-1;for(int j=0;j<(1<<i);j++){if(calculate(b[j]^b[(1<<i)-1])==m-1 && calculate(b[(j+(1<<i)-1)%(1<<i)])==m-1){//计算1的位数p=j;break;}}if(p==-1)return 0;for(int j=0;j<(1<<i);j++)b[(1<<i)+j]=(1<<i)^b[(p+j)%(1<<i)];}for(int i=0;i<(1<<n);i++)printf("%d\n",b[i]);}}return 0;
}

 

这篇关于处女座与汉明距离的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070434

相关文章

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x

模拟退火求n个点到某点距离和最短

/*找出一个点使得这个店到n个点的最长距离最短,即求最小覆盖圆的半径用一个点往各个方向扩展,如果结果更优,则继续以当前步长扩展,否则缩小步长*/#include<stdio.h>#include<math.h>#include<string.h>const double pi = acos(-1.0);struct point {double x,y;}p[1010];int

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑

SimD:基于相似度距离的小目标检测标签分配

摘要 https://arxiv.org/pdf/2407.02394 由于物体尺寸有限且信息不足,小物体检测正成为计算机视觉领域最具挑战性的任务之一。标签分配策略是影响物体检测精度的关键因素。尽管已经存在一些针对小物体的有效标签分配策略,但大多数策略都集中在降低对边界框的敏感性以增加正样本数量上,并且需要设置一些固定的超参数。然而,更多的正样本并不一定会带来更好的检测结果,事实上,过多的正样本

Matlab)实现HSV非等间隔量化--相似判断:欧式距离--输出图片-

%************************************************************************** %                                 图像检索——提取颜色特征 %HSV空间颜色直方图(将RGB空间转化为HS

C/C++两点坐标求距离以及C++保留两位小数输出,秒了

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 3. 备注 1. 前言 依旧是带来一个练手的题目,目的就一个,方法千千万,通向终点的方式有很多种,没有谁与谁,我们都是为了成为更好的自己。 2. 正文 2.1 问题 题目描述: 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。 输入格式:

mysql5.6根据经纬度查询距离二

在MySQL 5.6中,您可以使用Haversine公式来根据经纬度查询距离。以下是一个示例SQL查询,它计算出所有点与给定点(经度lon和纬度lat)的距离,并按距离排序: SELECT id, (2 * 6378.137 * ASIN(SQRT(POW( SIN( PI( ) * ( $lng- `long` ) / 360 ), 2 ) + COS( PI( ) * $lat / 180

像素间的关系(邻接、连通、区域、边界、距离定义)

文章目录 像素的相邻像素4邻域D邻域8邻域 邻接、连通、区域和边界邻接类型连通区域边界 距离测度欧氏距离城市街区距离(city-block distance)棋盘距离(chessboard distance) 参考 像素的相邻像素 4邻域 坐标 ( x , y ) (x,y) (x,y)处的像素 p p p有2个水平的相邻像素和2个垂直的相邻像素,它们的坐标是: ( x

【go语言计算两个经纬度距离】根据经纬度计算两点之间距离

一、需求分析: 输入两个经纬度,计算它们之间的距离 lat1,lng1 := 32.060255,118.796877lat2,lng2 := 39.904211,116.407395 二、计算公式 //C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)

【python 走进NLP】文本相似度各种距离计算

计算文本相似度有什么用? 1、反垃圾文本的捞取 “诚聘淘宝兼职”、“诚聘打字员”…这样的小广告满天飞,作为网站或者APP的运营者,不可能手动将所有的广告文本放入屏蔽名单里,挑几个典型广告文本,与它满足一定相似度就进行屏蔽。 2、推荐系统 在微博和各大BBS上,每一篇文章/帖子的下面都有一个推荐阅读,那就是根据一定算法计算出来的相似文章。 3、冗余过滤 我们每天接触过量的信息,信息之间存在大量