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. c#自制抽奖小程序

    #region 第一部分界面设计 ; Button button = new Button(); Image[] images = new Image[N]; PictureBox[] picture ...

  2. 【JAVA】JSP+layui框架 静态表格转化成数据表格

    <table lay-filter="demo" class="layui-table" id="excTable"> < ...

  3. ios手机app消息推送

    h5+app项目,推送平台 " 个推 " 首先在manifest.json配置文件中点击模块权限配置,勾选push消息推送配置如图1-1 第二部在manifest.json配置文件 ...

  4. Oracle - 实现MySQL的limit功能

    MySQL的limit功能是获取指定行数的数据,Oracle没有这个limit,但是有其它方法. oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结果集的行数,r ...

  5. SpringBoot学习之@Configuration注解和@Bean注解

    @Configuration 1.@Configuration注解底层是含有@Component ,所以@Configuration 具有和 @Component 的作用. 2.@Configurat ...

  6. MySQL DataType--当整数列遇到小数

    初始化数据: ## 创建测试表 CREATE TABLE `tb002` ( `c1` ) NOT NULL AUTO_INCREMENT, `c2` ) DEFAULT NULL, `c3` ) D ...

  7. Spring-Security-Oauth2 基于JDBC存储令牌和RBAC权限认证

    相关配置来自李哥博客:  https://funtl.com/zh/spring-security-oauth2/   (本文仅记录自己学习过程,说的不详细,可以观看李哥博客) 认证服务器和资源服务器 ...

  8. zabbix的psk加密结合zabbix_get取值

    转载:https://www.xj123.info/7386.html 参考文档:https://www.zabbix.com/documentation/3.0/manpages/zabbix_ge ...

  9. mysql技术内幕--innodb存储引擎图解

    1. Innodb存储引擎        2. Innodb文件        3. Innodb表        4. Innodb事务        5. innodb索引与算法        6 ...

  10. Makefile学习二

    今天继续对Makefile进行研究,话不多说,进入正题: make常用内嵌函数: 下面利用上面的知识点来实现一个多级目录的Makefile,如下: 多级目录Makefile: 这个例子的目录结构如下: ...