小X与神牛

时间限制: 1 Sec  内存限制: 128 MB

题目描述

小X在野外遇到了一种神奇的牛,并将其命名为“神牛”。
神牛都长着B只角,B只角从左到右在头顶上排成一排。每只角上都标着数字,不是0就是1。小X将每头神牛的B只角上的数字从左到右依次取出,组成一个只含0或1的B位二进制数。小X将这个二进制数转化为十进制,用这个十进制数来代表一头神牛,这个十进制就是这头神牛的编号。
神牛们之间的关系是很微妙的,如果两头神牛的第i只角上的数字不同,则称这两头神牛的第i只角是不一样的。如果两头神牛不同的角的数目大于等于D,则称这两头神牛是友好的。比如当B=8,D=2时,
01010100
00110100
  xx
这两头神牛的第2和第3只角不同(x指向的位置),不同的角的数目为2,所以这两头神牛是友好的。
现在小X向你求助:请找出N头神牛,使得任意两头神牛都是友好的,并将这N头神牛的编号按从小到大排序后依次输出。如果有多种符合条件的解,那么排在越前面的牛的编号越小越好。

输入

输入仅有一行包含3个用空格隔开的正整数,分别表示 N, B, D。

输出

输出仅有一行包含N个非负整数,相邻两个数之间用一个空格隔开,表示N头神牛的编号。如果有多解,你的程序要输出这样的解:越前面的牛的编号越小越好。

样例输入

复制样例数据

3 5 3

样例输出

0 7 25

提示

每头神牛都长着7只角,若两头神牛不同的角的数目大于等于3,则这两头神牛是友好的。现在要找出16头相互都友好的神牛。
答案是0000000, 0000111, 0011001, 0011110, 0101010, 0101101, 0110011, 0110100, 1001011, 1001100, 1010010, 1010101, 1100001, 1100110, 1111000, 1111111,转化为十进制就是0 7 25 30 42 45 51 52 75 76 82 85 97 102 120 127

对于30%的数据,1<=D<=B<=8,1<=N<=3
对于另外10%的数据,D=1
对于另外30%的数据,D=2
对于100%的数据,1<=D<=B<=8, 1<=N<=16
数据保证有解。

首先题目要求值越小越好,那么就从0开始。用字符串存储长度为B的二进制,然后从第一位到第b位枚举一遍,为了使不相同的值越多,那么不相同的位数从d位开始,所以dfs时每一位从0开始,然后再为1。。。

最后存储比较完事。

/**/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <stack>
#include <queue>typedef long long LL;
using namespace std;int n, b, d, ans[20], num;
string s[1005];int pow(int x, int nu){int res = 1;for (int i = 0; i < nu; i++) res *= x;return res;
}void dfs(int len, string str){if(len == b){int f = 0;for (int i = 0; i < num; i++){//与已有的答案进行比较,如果不同的值大于d存储int nu = 0;for (int j = 0; j < b; j++){if(s[i][j] != str[j]) nu++;}if(nu < d){f = 1; break;}}if(!f) s[num++] = str;return ;}for (int i = 0; i <= 1; i++) dfs(len + 1, str + (char)('0' + i));
}int main()
{//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);scanf("%d %d %d", &n, &b, &d);for (int i = 1; i <= b; i++) s[0] += '0';num = 1;dfs(0, "");for (int i = 0; i < num; i++){//每个数转化成10进制int num = 0;for (int j = 0; j < b; j++){num += (s[i][j] - '0') * pow(2, b - j - 1);}ans[i] = num;}sort(ans, ans + num);//从小到大排序for (int i = 0; i < n; i++) printf("%d ", ans[i]);return 0;
}
/**/

小X与神牛(dfs)相关推荐

  1. 数独小项目开篇:DFS解决数独难题

    数独小项目开篇:DFS解决数独难题 前言 DFS解决数独问题思路 代码实现细节 样例测试 总结 Reference 前言   这周小刀是挺忙的,周末加班,哎,谁不是996呢?(打工魂燃烧吧~   这次 ...

  2. 小 Biu 的旅行(dfs)

    题目描述 小Biu所在的城市有n个景点,有一些景点之间有单向联通的道路,现在小Biu在1号景点上,他想知道到达除了1号景点之外的每个景点分别最少需要经过多少条道路? 如图所示为样例数据,可以知道小Bi ...

  3. 小x与三角形 c语言 1秒,[2019年第一水] 小x与神牛

    题目描述 小X在野外遇到了一种神奇的牛,并将其命名为"神牛". 神牛都长着B只角,B只角从左到右在头顶上排成一排.每只角上都标着数字,不是0就是1.小X将每头神牛的B只角上的数字从 ...

  4. Java 第十一届 蓝桥杯 省模拟赛 小明植树(DFS)

    小明植树 题目 问题描述 小明和朋友们一起去郊外植树,他们带了一些在自己实验室精心研究出的小树苗. 小明和朋友们一共有 n 个人,他们经过精心挑选,在一块空地上每个人挑选了一个适合植树的位置,总共 n ...

  5. 【HDU3949 + BZOJ2115 + CF724G】【异或线性基例题】| 倍增 | 第k小异或和 | DFS处理环 |【CGWR】| N

    三道关于异或线性基的有趣的题目 [1] HDU 3949. XOR Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3276 ...

  6. ACM 小蝌蚪安家 简单DFS

    描述 在一个矩形区域内,有些地方有水,有些地方没水.所有相邻的有水的地方会共同组成一个水洼,小蝌蚪想在这块区域中找到一个最大的水洼来安家. 输入 有多组输入数据,每组第一行包含两个正整数n,m(n,m ...

  7. hrbust 1614 小z的地图 dfs

    小z的地图 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 101(30 users) Total Accepted: 28(24 us ...

  8. 1916. 统计为蚁群构筑房间的不同顺序 费马小定理+快速幂+DFS

    1916. 统计为蚁群构筑房间的不同顺序 你是一只蚂蚁,负责为蚁群构筑 n 间编号从 0 到 n-1 的新房间.给你一个 下标从 0 开始 且长度为 n 的整数数组 prevRoom 作为扩建计划.其 ...

  9. 部分和问题 (dfs搜索 尺取)

    部分和问题 给定整数a1, a2, a3, a4,  ..........   ,  an  ,判断是否可以从中取出若干个数,使得他们的和恰好为k  . 1  <= n <= 20 测试数 ...

最新文章

  1. Java控制内存的功力
  2. 区块链系统之《一种基于区块链的云数据共享方法》
  3. 圈子 | 苏宁易购产品经理:平台支撑型产品的思维方式
  4. eWeek: 三巨头Web应用服务对比
  5. 机器学习(四) 下采样和上采样
  6. C# 之 static的用法详解
  7. android sqlite orm,ioc,Afinal 0.2 发布 Android的快速开发框架(ORM,IOC)
  8. 为什么整个互联网行业都缺前端工程师?
  9. Java异常处理之InvocationTargetException(反射异常)
  10. Asp.net高效导出excel篇之Aspose导出excel
  11. 实战matlab之文件与数据接口技术,实战MATLAB之文件与数据接口技术
  12. django 与 mysql 勾结指南
  13. linux 查看运行平台,linux查看程序运行相关命令
  14. 汉王考勤管理系统教程
  15. 《流畅的Python第二版》读书笔记——文本和字节序列
  16. 游戏业务DDoS攻防对抗案例分享
  17. win32Day06:控件
  18. 云时代,最好用的MySQL客户端工具推荐
  19. 【Mockplus教程】如何修改手机外壳?
  20. onedrive php映射,宝塔面板搭建OneDrive目录程序OLAINDEX

热门文章

  1. OpenCV基础(7)OpenCV中的颜色空间
  2. 前端埋点pv,uv以及实现思路
  3. p值 统计学意义_统计学意义不重要为什么p值不应过高
  4. 有趣好玩的html页面,有趣的HTML5网站集合 - 小俊学习网
  5. Linux系统的时区时间设置
  6. PT项目-SAP库存账龄分析报表
  7. 性能优化之MySQL优化
  8. 在Dreamweaver 中应用模板
  9. 为什么发动机需要吸入大量的空气?
  10. java猫抓老鼠_猫抓老鼠-Java面向对象特点梳理