USACO2.1 Hamming Codes【枚举+二进制处理+输出格式+题意理解】
这道题加了2个看起来奇奇怪怪的$tag$
1.输出格式:不得不说这个格式输出很恶心,很像$UVA$的风格,细节稍微处理不好就会出错。
因为这个还$WA$了一次:
int t=,m=n;
while(m>=)
{
for(int i=t+;i<=t+;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[t+]);
t+=;
m-=;
}
if(m==) return ;//一定要注意这个东西!!!
for(int i=t+;i<n;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[n]);
就是刚刚好个数是整十数的时候,$while$外面的循环是没有用的,循环虽然进不去,外面的$ans[n]$却能被输出,所以就会错。
其实$m$有点多余来着,只需要$t$控制就可以了,不过这么写,会直观一点吧。
2.题意理解:这道题题目描述也比较唬人,搞了好多进制转化的东西出来,然而并没有什么用,因为即使是在不同的进制下,数的大小是不会变的。

所以这个东西就是来唬人的,直接用10进制从小到大枚举就可以了。
所以题意就是求尽量小的$n$个数,使两两之间二进制不相同的位数大于等于$d$就可以了。(怎么突然想到线性基 误)
从小到大枚举,然后依次与前面的数判断不相同的位数是否大于等于$d$,如果有一个数不满足,就不能把这个数加进去。
判断2个数的二进制不相同的位数,只需要将这两个数异或一下,再求异或的结果中有多少个1就可以了(异或就是那一位两个不相同就是1,相同就是0)。
/*
ID: Starry21
LANG: C++
TASK: hamming
*/
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
#define N 70
#define ll long long
#define INF 0x3f3f3f3f
int n,b,d;
int ans[N];
int bitcnt(int x)
{
int res=;
while(x)
{
x&=(x-);
res++;
}
return res;
}
int check(int x,int y)
{
int k=x^y;
return bitcnt(k);
}
int main()
{
//freopen("hamming.in","r",stdin);
//freopen("hamming.out","w",stdout);
scanf("%d %d %d",&n,&b,&d);
int k=,cnt=;
ans[]=;
while(cnt<n)
{
bool f=;
for(int i=;i<=cnt;i++)
if(check(ans[i],k)<d)
{
f=;
break;
}
if(!f) ans[++cnt]=k;
k++;
}
int t=,m=n;
while(m>=)
{
for(int i=t+;i<=t+;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[t+]);
t+=;
m-=;
}
if(m==) return ;//一定要注意这个东西!!!
for(int i=t+;i<n;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[n]);
return ;
}
Code
USACO2.1 Hamming Codes【枚举+二进制处理+输出格式+题意理解】的更多相关文章
- 洛谷P1461 海明码 Hamming Codes
P1461 海明码 Hamming Codes 98通过 120提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 给出 N,B 和 ...
- 洛谷 P1461 海明码 Hamming Codes
P1461 海明码 Hamming Codes 题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B &l ...
- USACO 2.1 Hamming Codes
Hamming CodesRob Kolstad Given N, B, and D: Find a set of N codewords (1 <= N <= 64), each of ...
- 【USACO 2.1】Hamming Codes
/* TASK: hamming LANG: C++ URL:http://train.usaco.org/usacoprob2?a=5FomsUyB0cP&S=hamming SOLVE: ...
- P1461 海明码 Hamming Codes
题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位 ...
- USACO Section2.1 Hamming Codes 解题报告 【icedream61】
hamming解题报告----------------------------------------------------------------------------------------- ...
- USACO 2.1 海明码 Hamming Codes (模拟+位运算+黑科技__builtin_popcount(n))
题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位 ...
- USACO Hamming Codes DFS 构造
我还是用了很朴素的暴力匹配A了这题,不得不感叹USACO时间放的好宽... /* ID: wushuai2 PROG: hamming LANG: C++ */ //#pragma comment(l ...
- URAL 1792. Hamming Code (枚举)
1792. Hamming Code Time limit: 1.0 second Memory limit: 64 MB Let us consider four disks intersectin ...
随机推荐
- 深入理解java不可变对象(转)
深入理解Java中的不可变对象 不可变对象想必大部分朋友都不陌生,大家在平时写代码的过程中100%会使用到不可变对象,比如最常见的String对象.包装器对象等,那么到底为何Java语言要这么设计,真 ...
- k8s名称空间资源
namespace是k8s集群级别的资源,用于将集群分隔为多个隔离的逻辑分区以配置给不同的用户.租户.环境或项目使用,例如,可以为development.qa.和production应用环境分别创建各 ...
- vue项目搭建步骤以及一些安装依赖包
一. vue-cli初始化1. 全局安装 vue-clinpm install --global vue-cli2. 创建一个基于 webpack 模板的新项目vue init webpack my- ...
- Linux系统上java调用C++ so库文件
PART1: java中使用jna替代jni调用c++/c生成的 dll/so库文件需要做的事项 1.引入JNA依赖或者直接下载JNAjar包 <!-- http ...
- echarts 添加自定义label标签
1.echarts 自定义标签 注:当设置visualMap的后,给覆盖regions单独定义的值(如果data 中没有regions的地区 则无妨,我这个是从data中删除'青岛',但是lable ...
- 15.DRF学习以及相关源码阅读
1.http请求协议 代码很枯燥,结果和奇妙. 1.cbv django.vuews import View classs LoginView(View): def get(self,requset) ...
- HDU2082 找单词
问题分析 不难想到用母函数做. 令自变量\(x\)的次数就是单词价值,那么答案就是\(x\)的\(1\)次到\(50\)次的系数之和.由于我们只需要处理前\(51\)项,所以暴力多项式相乘即可. 举个 ...
- JavaWeb_(设计模式)单例模式
菜鸟教程 传送门 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该 ...
- Kotlin的高阶函数和常用高阶函数
Kotlin的高阶函数和常用高阶函数 文章来源:企鹅号 - Android先生 高阶函数的定义 将函数当做参数或者是返回值的函数 什么是高阶函数 可以看看我们常用的 函数: 首先我们可以知道, 是 的 ...
- 利用MFC在控件内将txt中的数据画图
1:采集txt文件中的数据测试程序如下: #include "stdafx.h" #include <fstream> #include "iostream& ...