34988 Happy Reversal(二进制去取反)

简介:

/*
   题意:给多个二进制数,对某些数进行按位取反操作!
   然后从中找到最大数和最小数,并输出他们的差值! 
   注意:所有的数都是整数,包括取反之后
   
   思路:一个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[66];
int n, k;

int main(){
   int t, cc=0;
   scanf("%d", &t);
   while(t--){
       scanf("%d%d", &n, &k);
       long long tmp=0;
       for(int i=1; i<=k; ++i)
          tmp=(tmp<<1)+1;
       
       for(int i=1; i<=n; ++i){
          scanf("%s", ch+1);
          long long xx=0;
          for(int j=1; j<=k; ++j)
              if(ch[j]!='0')
                 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+1, maxN+n+1, cmpMax);
       sort(minN+1, minN+n+1, cmpMin);
       printf("Case #%d: ", ++cc);
       
       if(n==1) printf("0\n");//不要忘记考虑一个数的时候! 
       else if(maxN[1].p!=minN[1].p)
          printf("%lld\n", maxN[1].nn-minN[1].nn);
       else printf("%lld\n", max(maxN[2].nn-minN[1].nn, maxN[1].nn-minN[2].nn));
         
   }
   return 0;   
}

目录
相关文章
|
6月前
|
存储 Python
python的二进制,八进制以及十六进制
python的二进制,八进制以及十六进制
|
2月前
|
Unix 编译器 C语言
[oeasy]python034_计算机是如何认识abc的_ord函数_字符序号_ordinal_
[oeasy]python034_计算机是如何认识abc的_ord函数_字符序号_ord
22 0
|
3月前
|
Python
python中的二进制、八进制、十六进制的相互转换
python中的二进制、八进制、十六进制的相互转换
51 0
|
Python
【python】bin/dec/hex/bnr进制转换函数及fp32转十六进制
【python】bin/dec/hex/bnr进制转换函数及fp32转十六进制
115 0
|
Python
【python】bin/dec/hex/bnr以及浮点数进制转换器GUI
【python】bin/dec/hex/bnr以及浮点数进制转换器GUI
|
Python
python十六进制怎么转换成十进制
python十六进制怎么转换成十进制
165 0
|
存储 Serverless
[oeasy]python0073_进制转化_eval_evaluate_衡量_oct_octal_八进制
[oeasy]python0073_进制转化_eval_evaluate_衡量_oct_octal_八进制
77 0
Golang:输出Emoji表情符号
Golang:输出Emoji表情符号
239 0
Golang:输出Emoji表情符号
|
存储 数据安全/隐私保护 数据中心
[oeasy]python0083_十进制数如何存入计算机_八卦纪事_BCD编码_Binary_Coded_Decimal
[oeasy]python0083_十进制数如何存入计算机_八卦纪事_BCD编码_Binary_Coded_Decimal
168 0
[oeasy]python0083_十进制数如何存入计算机_八卦纪事_BCD编码_Binary_Coded_Decimal
|
开发工具
[oeasy]python0054_三引号_原样显示字符串_triple_quoted
[oeasy]python0054_三引号_原样显示字符串_triple_quoted
129 0
[oeasy]python0054_三引号_原样显示字符串_triple_quoted