[USACO][枚举]Hamming Code

题意:

给出N,B,D,要求输出N个十进制数字,他们之间的Hamming距离在长度为B位的时候都等于D。

思路:

感觉图论就是一个,允许我们记忆化的边权好工具!(废话用edges存边了还不是当然的)

代码:

/*
ID :ggy_7781
TASK :hamming
LANG :C++11
*/

#include <bits/stdc++.h>
#define maxB 8
#define maxN 64
#define maxD 7
using namespace std;

int N,B,D;
int maxn;
int getDist(int x,int y)
{
    int tmp = (x^y);
    int cnt = 0;
    while(tmp)
    {
        cnt += (tmp&1);
        tmp = tmp >> 1;
    }
    return cnt;
}
int one[256][256];
int main(void)
{
    freopen("hamming.in","r",stdin);
    freopen("hamming.out","w",stdout);
    cin>>N>>B>>D;
    maxn = pow(2,B) ;
    for(int i = 0;i < maxn;i ++)
    {
        for(int j = 0;j <maxn;j ++)
        {
            one[i][j] = getDist(i,j);
        }
    }
    int pos = 0;
    vector<int> ret;
    ret.push_back(pos);
    while(ret.size() < N)
    {
        for(int i =pos + 1 ;i <maxn;i ++)
        {
            bool ok = true;
            for(int j = 0;j <ret.size();j ++)
            {
                if(one[ret[j]][i] < D)
                {
                    ok = false;
                    break;
                }
            }
            if(ok)
            {
                ret.push_back(i);
                pos = i;
                break;
            }
        }
    }
    int cnt = 0;
    bool bgn = true;
    bool edd = false;
    for(int i =0 ;i <N;i ++){
        cnt ++;
        if(bgn)
        {
            bgn = false;
            edd = false;
        }else
            cout<<" ";
        cout<<ret[i];
        if(cnt == 10)
        {
            bgn = true;
            edd = true;
            cnt = 0;
            cout<<endl;
        }
    }
    if(!edd)
        cout<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/ggy778/p/12231409.html

时间: 2024-10-04 02:44:56

[USACO][枚举]Hamming Code的相关文章

URAL 1792. Hamming Code (枚举)

1792. Hamming Code Time limit: 1.0 second Memory limit: 64 MB Let us consider four disks intersecting as in the figure. Each of the three shapes formed by the intersectionof three disks will be called a petal. Write zero or one on each of the disks.

USACO holstein AC code

/* ID:kevin_s1 PROG:holstein LANG:C++ */ #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <vector> #include <map> #include <set> #include <algorithm> #include <cstdlib&g

jsp页面用el表达式获取枚举的code

<c:set var="D_BUSINESS" value="<%=DeptEnum.D_BUSINESS%>"/> otherType="${D_BUSINESS.code}"

Hamming code

Also known as (7,4) code,7 trainsmitted bits for 4 source code. TRANSMIT The transmitted procedure can be reprecented as follows. $t=G^Ts$ where G is: import numpy as np G = np.matrix( [[1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1], [1,1,1,0], [0,1,1,1]

[USACO][枚举]Ski Course Design

这道题位于第一章section1.4贪心部分. 题意: 给出N个山峰高度,高度属于[0,100]units:Farmer FJ需要做一些修改,来保证最高高度和最低高度的差值不大于17uints.这个修改包括减小最高山峰和增高最低山峰高度,并且修改x unit的高度要付出x^2的费用. 给出N个山峰的高度,求出满足要求修改的最小费用. 思路: 枚举所有可能的高度上下限(约定maxh-minh==17),判断此时的耗资是否最小. 排序实际上是没有必要的.只要每次都完全遍历hil[]数组,判断比下限小

[USACO][枚举]Healthy Holsteins

这道题看起来背包其实是二进制枚举哒! 题意: 一包饲料有三种营养素含量,要求搭配饲料使得每种营养素累加之和不小于目标值.给出研究的营养素种类数目.每种营养素的目标值.备选饲料数目,以及每种饲料的营养素含量,求出最少选取多少饲料可以满足要求.(每个规格的饲料只能用一次) 遇到的问题: * cpp重载运算符+我透啊好迷惑!找时间补补郭伟......* 问题都是简单的,不要总想着自己不会的东西,只要动脑一定可以解决!!* 呃...ostream&重载又又又忘记return os了......* 本题看

[USACO][枚举]Preface Numbering

题意: 输入一个数字N,输出[1,N]中数字转化为罗马数字之后每个字母出现的次数. 思路: 暴力过的...写了一个阿拉伯数字转换罗马数字的程序,然后枚举数字string找的字母. 遇到的坑就是罗马数字没有450的简短表示!! leetcode上面有罗马数字和阿拉伯数字互相准换的题目,可能是受这个影响吧...... Analysis的题解里面有这些值得学习的地方:* strcat把两个char[]连接起来 剩下的题解没详细地去看懂>< 1 /* 2 ID :ggy_7781 3 TASK :pr

JAVA 如何循环枚举(main函数里)

/**  * Bestpay.com.cn Inc.  * Copyright (c) 2011-2015 All Rights Reserved.  */ package com.bestpay.bpbp.common.enums; /**  * 销账业务类型枚举  *   * @author Weiliang  * @version $Id: BizTypeEnum.java, v 0.1 2015年12月14日 下午2:20:53 Weiliang Exp $  */ public enu

学会使用Constant常量或者Enum枚举

好多时候我们在数据库表中存放的类型是一个代号CHAR(1) 0,1,2,3等分别代表些什么. 那么你是怎么知道0,1,2,3代表什么的呢? 有的是建表,连接查询,但很少人用. 有的是在jsp页面c:if判断. 我的做法是在VO类添加一个属性,属性只有getter方法,没有setter和属性定义.然后getter方法中根据代号查询对应的枚举对应code的desc,return.在jsp页面需要展示的话直接使用该属性即可. 常量和枚举还有一个地方好使用,就是你在Controller中使用一些特殊的变