/*
题意:给多个二进制数,对某些数进行按位取反操作!
然后从中找到最大数和最小数,并输出他们的差值!
注意:所有的数都是整数,包括取反之后 思路:一个n为二进制数x,令tmp为n位全1!则 y=tmp&(tmp^x)就是取反之后的数字
将x和y中最大的存放大最大值数组中,最小值存放到最小值数组中! 排序之后,如果最大值数组第一个元素的下标 != 最小值数组第一个元素的下标
说明这两个最值不是一个数得到的,那么就输出差值!
否则最大的差值就是max(最大值数组[2]-最小值数组[1], 最大值数组[1]-最小值数组[2]);
*/
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 10005
using namespace std;
struct node{
long long nn;
int p; //这个数的下标
}; bool cmpMin(node a, node b){
return a.nn<b.nn;
} bool cmpMax(node a, node b){
return a.nn>b.nn;
} node maxN[N], minN[N]; char ch[];
int n, k; int main(){
int t, cc=;
scanf("%d", &t);
while(t--){
scanf("%d%d", &n, &k);
long long tmp=;
for(int i=; i<=k; ++i)
tmp=(tmp<<)+; for(int i=; i<=n; ++i){
scanf("%s", ch+);
long long xx=;
for(int j=; j<=k; ++j)
if(ch[j]!='')
xx+=(long long)(pow(2.0, (k-j)*1.0)+0.5);
long long yy=tmp&(xx^tmp);
maxN[i].p=minN[i].p=i;
maxN[i].nn=max(xx, yy);
minN[i].nn=min(xx, yy);
}
sort(maxN+, maxN+n+, cmpMax);
sort(minN+, minN+n+, cmpMin);
printf("Case #%d: ", ++cc); if(n==) printf("0\n");//不要忘记考虑一个数的时候!
else if(maxN[].p!=minN[].p)
printf("%lld\n", maxN[].nn-minN[].nn);
else printf("%lld\n", max(maxN[].nn-minN[].nn, maxN[].nn-minN[].nn)); }
return ;
}

34988 Happy Reversal(二进制去取反)的更多相关文章

  1. pta L2-002 链表去重 +散列表知识小普及+二进制取反补码运算

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805072641245184: 废话:今天忙着学习新知识了,没怎 ...

  2. PHP中关于位运算符 与 或 异或 取反

    <?php /** * author:LMS * createTime:2015/07/22 * desctiption:位运算[ & | ^ ~ ] * 与&:如果a.b两个值 ...

  3. 【转】C语言位运算符:与、或、异或、取反、左移与右移详细介绍

    转载自:http://www.jb51.net/article/40559.htm,感谢原作者. 以下是对C语言中的位运算符:与.或.异或.取反.左移与右移进行了详细的分析介绍,需要的朋友可以过来参考 ...

  4. C语言位运算符及作用:与、或、异或、取反、左移和右移

    一.& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0应用:(1)清零 若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:原来的数 ...

  5. C语言位运算符:与、或、异或、取反,左移和右移

    C语言位运算符:与.或.异或.取反.左移和右移 个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. ,则该位的结果值为1,否则为0 | ...

  6. C语言位运算符:与、或、异或、取反、左移和右移

    语言位运算符:与.或.异或.取反.左移和右移 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符 ...

  7. 关于使用python ~取反操作符带出的一系列问题

    晚上的时候,无意之间看到stackoverflow上面的一个编程挑战赛,各路高手各种搞事,看到python的地方突然发现用了很多位运算的符号,但是~符号引起了我和同事的注意. 我们很少在程序中使用这种 ...

  8. php位运算 与 或 异或 取反

    <?php /** php中有4个位运算,分别是&与 |或 ^异或 ~取反 & 两位全为1,结果为1 | 有一位为1,结果为1 ^ 一个为0,一个为1,结果为1 ~ 取反0-&g ...

  9. ORACLE中关于使用between在MyBatis中取不同的区间值和取反

    最近在项目中使用between取不同的区间值问题,由于区间跨度大,而且区间多,又是前端传过来的参数,所以使用in和exists比较麻烦.然后就考虑使用between.现将使用方法记录一下. 假如表有个 ...

随机推荐

  1. Android AbsListView 的item动画类库 —— JazzyListView

    https://github.com/twotoasters/JazzyListView/tree/master/sample github:https://github.com/twotoaster ...

  2. MyEclipse下XFire开发Webservice实例

    XFire Java SOAP框架概述 (摘自:http://tech.it168.com/j/e/2006-10-28/200610281432707.shtml )     MyEclipse W ...

  3. 【OC基础语法考试】

    OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...

  4. 解剖SQLSERVER 第十七篇 使用 OrcaMDF Corruptor 故意损坏数据库(译)

    解剖SQLSERVER 第十七篇 使用 OrcaMDF Corruptor 故意损坏数据库(译) http://improve.dk/corrupting-databases-purpose-usin ...

  5. Python札记 -- 切片赋值

    一.疑惑    今天在看<Python Cookbook>第四章Python技巧的4.7小节时,发现一段初看起来让人疑惑的代码.该小节的任务是将一个包含列表(行)的列表,转换成一个新的列表 ...

  6. OWIN的理解和实践(三) –Middleware开发入门

    上篇我们谈了Host和Server的建立,但Host和Server无法产出任何有实际意义的内容,真正的内容来自于加载于Server的Middleware,本篇我们就着重介绍下Middleware的开发 ...

  7. GitHub的多人协同开发配置

    GitHub For Windows 下载地址:https://windows.github.com/ 基本的注册登录就不细讲了. 在源代码管理上,最重要的就是仓库了.仓库这一概念很容易理解,所谓仓库 ...

  8. 使用阿里云负载均衡遭遇的http重定向https的问题

    昨天解决了在阿里云负载均衡上部署https证书的问题(详见一个空行引起的阿里云负载均衡上部署https证书的问题),并完成了部署,负载均衡的监听配置是这样的: 用户与负载均衡之间走https协议,负载 ...

  9. RCP:导航器视图删除操作快捷键失效的解决方案

    导航器视图按下“Delete”的时候,会触发删除节点的操作.如果失效,按以下步骤检查: 1.在要删除的节点上点击右键,确定删除操作是否生效.如果没有生效,则按下列位置 a)检查navigator扩展配 ...

  10. 【Bugly干货】关于 Android N 那些你不知道的事儿

    今年3月,Google 破天荒提前半年发布了 Android N 开发者预览版.当然,作为一个不合格的谷粉并没有第一时间体验安装,因为至今仍然能够回忆起来去年今日此门中(雾)兴冲冲刷了 Android ...