XOR Clique(按位异或):

传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4057

准备:异或:参加运算的两个数据,按二进制位进行“异或”运算。

运算规则:0^0=0,   0^1=1, 1^0=1,    1^1=0;

即:参加运算的两个对象,如果两个相应位为“异”,则该位结果为1,否则为0;

题意:

有一个a1到an的序列,问能不能找到一个长度为S的序列,对于在S里面的任意的i,j满足a​i​​⊕a​j​​<min(a​i​​,a​j​​) 这个条件,两个数的异或小于这两个数的最小值,要求输出S的最大长度。

解题思路:

多找几组数据就会发现若想异或结果小于最小值,只需要两个数二进制形式位数相同, 即二进制前面第一位都为1,进行异或运算后就会第一位变为0,自然比原来两个数都小 所以只需要将序列中所有数的二进制形式位数进行统计即可(学长说二进制运算一般找最高位是常用的方法)

以下为AC代码:

 /* */
# include <bits/stdc++.h>
using namespace std;
typedef long long ll; const int INF = 0x3f3f3f3f;
const int MAXN = ;///用来记录路最高位的值,2的30次方就可以达到1e9
int a[MAXN];///用来记录某一最高位所包含的数有几个 int bt(int x)
{
int cnt = ;
while( x )
{
x >>= ;///x除以2,10进制化2进制运算
cnt++;
}
return cnt;///返回最高位
} int main()
{
int T
cin >> T;
while( T-- )
{
memset(a, , sizeof(a));
int n;
scanf("%d", &n);
int ans = ;
for( int i=; i<n; i++ )
{
int e;
scanf("%d", &e);
ans = max(ans, ++a[bt(e)]);///找出最高位为bt(e)的值的个数,找出哪一最高位对应的数最多,极为最长子集包含的数的个数
}
printf("%d\n", ans);
}
return ;
}

以下为超时代码:

 #include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n;
int a[]={};///相当于建了一个桶来标记
scanf("%d", &n);
int k=;
for (int i = ; i < n; ++i)
{
int x,sum=;
scanf("%d", &x);
while(x)
{
sum++;
x/=;
}
a[sum]++;
}
for(int i=;i<;i++)///这样遍历,无用循环做的次数太多了,所以超时
{
k=max(k,a[i]);
}
printf("%d\n",k );
}
return ;
}

XOR Clique(按位异或)的更多相关文章

  1. ZOJ 4057 XOR Clique(位运算)

    XOR Clique BaoBao has a sequence a​1​,a​2,...,a​n. He would like to find a subset S of {1,2,...,n} s ...

  2. The 2018 ACM-ICPC Asia Qingdao Regional Contest K XOR Clique

    K XOR Clique BaoBao has a sequence a​1​​,a​2​​,...,a​n​​. He would like to find a subset S of {1,2,. ...

  3. K XOR Clique

    BaoBao has a sequence a​1​,a​2,...,a​n. He would like to find a subset S of {1,2,...,n} such that ∀i ...

  4. 汇编 XOR运算

     XOR运算  按位异或^ 一.按位异或^ 运算符^ 1^1=0;0^0=0; //相同则为0 0^1=1;1^0=1; //不相同为1 1101^0110=1011; // asm_XOR.c ...

  5. Delphi_03_Delphi_Object_Pascal_基本语法_01

    这次是一个基本语法的第一部分,包括变量.变量初始化.常量.运算符.字符串等内容. { 本程序演示 Delphi Pascal 的基本语法 1.变量及变量的初始化 2.常量 3.运算符 3. 4. } ...

  6. PHP 位运算(&, |, ^, ~, <<, >>)及 PHP错误级别报告设置(error_reporting) 详解

    位运算符允许对整型数中指定的位进行求值和操作. 位运算符 例子 名称 结果 $a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1. $a | $b Or(按位或) ...

  7. 前端学PHP之运算符

    × 目录 [1]总括 [2]算术运算符 [3]赋值运算符[4]位运算符[5]比较运算符[6]错误控制[7]逻辑运算符[8]字符串连接[9]数组运算符 前面的话 运算符是可以通过给出的一或多个表达式来产 ...

  8. calc常用

    Mod:求模(整数相除求余数), And:按位与 Or:按位或 Xor:按位异或 Lsh:按位左移 Not:按位取反 Int:取整数部分

  9. crc循环冗余校验

    循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误.它 ...

随机推荐

  1. webapi初学项目(增删改查),webapi增删

    wenapi做了一个从数据库增删改查的项目 webapi: 1.创建项目:visual C# —> ASP.NET MVC 4 web应用程序 模板—>web api; 2.注册路由: 路 ...

  2. Java的集合整理

    1.List和Set都是接口,他们都继承于接口Collection,List是一个有序的可重复的集合,而Set的无序的不可重复的集合.Collection是集合的顶层接口,Collections是一个 ...

  3. IIS配置文件的XML格式不正确 applicationHost.config崩溃

    错误提示如图: 检查C:\Windows\System32\inetsrv\config目录下的applicationHost.config文件,备份一份. 可使用IIS提供的AppCmd.exe的r ...

  4. devextreme组装数据导出excel

    $.get("", function (grid_dataSource) { var grid_config = dxConfig.grid(grid_dataSource); g ...

  5. ubuntu classicmenu-indicator

      sudo add-apt-repository ppa:diesch/testing sudo apt-get update sudo apt-get install classicmenu-in ...

  6. spring的事务传播行为与隔离级别

    具体请参考blog:https://bbs.csdn.net/topics/391875990 要明白2个概念: 1.“spring的事务传播属性” 2.“spring的事务隔离级别” 例如正常的sp ...

  7. HTML学习摘要4

    DAY 4 text-align 属性规定了元素中文本的水平对齐方式: <html> <body> <h1 style="text-align:center&q ...

  8. DDL 操作表结构

    DDL 操作表结构:CRUD 一.C(create)创建 1.创建表 create table 表名( 列名1 数据类型1, 列名2 数据类型2, 列名3 数据类型3, ... 列名n 数据类型n ) ...

  9. CentOS 7 - 里面如何以root身份使用图形界面管理文件?

    nautilus 是gnome的文件管理器,但是如果不是root账号下,权限受限,我们可以通过以下方式以root权限使用! 启动shll,随后在shell里面输入下面命令: sudo nautilus

  10. SIM7500 SIM7600 SIM800 HTTP

    解释 //Start HTTP service AT+HTTPINIT //Stop HTTP service AT+HTTPTERM //Set HTTP Parameters value /* & ...