博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3711 Binary Number【水题】【bitset】
阅读量:7235 次
发布时间:2019-06-29

本文共 2209 字,大约阅读时间需要 7 分钟。

Binary Number

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2714    Accepted Submission(s): 1573


Problem Description
For 2 non-negative integers x and y, f(x, y) is defined as the number of different bits in the binary format of x and y. For example, f(2, 3)=1,f(0, 3)=2, f(5, 10)=4. Now given 2 sets of non-negative integers A and B, for each integer b in B, you should find an integer a in A such that f(a, b) is minimized. If there are more than one such integer in set A, choose the smallest one.
 

Input
The first line of the input is an integer T (0 < T ≤ 100), indicating the number of test cases. The first line of each test case contains 2 positive integers m and n (0 < m, n ≤ 100), indicating the numbers of integers of the 2 sets A and B, respectively. Then follow (m + n) lines, each of which contains a non-negative integers no larger than 1000000. The first m lines are the integers in set A and the other n lines are the integers in set B.
 

Output
For each test case you should output n lines, each of which contains the result for each query in a single line.
 

Sample Input
 
2 2 5 1 2 1 2 3 4 5 5 2 1000000 9999 1423 3421 0 13245 353
 

Sample Output
 
1 2 1 1 1 9999 0
 

Author
CAO, Peng
 

Source

给n个数和m个数,判断对于m哪个n与它相差2进制数最少

#include 
#include
#include
#include
#include
#include
#include
#include
#define INF 0x3f3f3f3fusing namespace std;const int maxn = 110;const int n = 100;bitset<20> a[maxn], b[maxn];int num[maxn];int f(int p, int q){ int ans = 0; for (int i = 0; i < 20; i++) { if (a[p][i] != b[q][i]) ans++; } return ans;}int main(){ int t; scanf("%d", &t); while (t--) { int n, m; scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) { scanf("%d", num + i); a[i] = num[i]; } for (int j = 0; j < m; j++) { int p; scanf("%d", &p); b[j] = p; } for (int i = 0; i < m; i++) { int ans = INF, val = -1; for (int j = 0; j < n; j++) { int temp = f(j, i); if (temp < ans) { ans = temp; val = num[j]; } else if (temp == ans && (val == -1 || num[j] < val)) { val = num[j]; } } printf("%d\n", val); } }}

转载于:https://www.cnblogs.com/Archger/p/8451628.html

你可能感兴趣的文章
OpenLDAP集成TLS/SSL
查看>>
为什么技多不压身, 却让你更迷茫了?
查看>>
JavaScript—日期(21)
查看>>
最简单的方式教你理解大小端字节序
查看>>
Linux命令——sed
查看>>
利用Linux系统生成随机密码的10种方法
查看>>
网络异常---支付宝接口
查看>>
/proc/sys/net/bridge/bridge-nf-call-iptables
查看>>
自己动手写MiniBBS系列(基本篇)之数据库设计
查看>>
高性能HTTP加速器Varnish(性能调优篇)
查看>>
Struts 2 框架学习 第1part 基本开发流程
查看>>
STM32的两只狗儿——窗口看门狗
查看>>
ios_随手篇1_关于捕捉scrollView的滑动方向
查看>>
流水账 - 初始化hadoop服务所要使用到的命令
查看>>
Spring Cloud Edgware新特性全接触
查看>>
人生面临众多选择,在分岔路口能否做好每一道选择题呢?
查看>>
从零开始写简易读写分离,不难嘛!
查看>>
CoreOS实践指南(十):在CoreOS上的应用服务实践(下)
查看>>
CentOS 配置第三方epo源
查看>>
老李分享:持续集成学好jenkins 2
查看>>