集合枚举

采用二进制进行集合枚举:

例如可以用二进制表示集合{2,3,6,1,7},二进制第i位对应集合第i个元素,1代表在,0代表不在集合中。上述集合全集为s=111112=31,例如子集A={2,1,7}可以表示为:

100112=25.而B={2,3,6,7}可以表示为:111012=23,.下面利用位运算完成对集合的运算:

A&B=10011&11101=10001={2,7}

A|B=10011|11101=11111={2,3,6,1,7}

A^B=01110={3,6,1};

一般用ALL_BITS表示全集,则ALL_BITS=(1<<n)-1,A的补集可以表示为ALL_BITS^A.查看第i(下标从0开始)个元素是否在集合s中: if(s&(1<<i))

时间: 2024-10-12 15:26:58

集合枚举的相关文章

51nod 1616 最小集合(枚举倍数)

分析:也就是取任意多个数,它们的最大公约数都在这个集合里.考虑到ai比较小,可以枚举小于a中最大值的所有数,判断是否为其中若干个数的gcd.记c[k]为a中k的倍数的个数,然后枚举k的倍数i*k,c[i]<2直接跳过,如果c[i*k]==c[k],说明k的那些倍数也同时是i*k的倍数,k就可以不在集合中,反之,如果任意i,c[i*k]<c[k],说明存在一个倍数和其它k的倍数的gcd是k,所以k一定在集合中.两次枚举倍数,复杂度为O(nlogn). 1 #include<iostream

(简单) POJ 3279 Fliptile,集合枚举。

Description Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He has arranged a brainy activity for cows in which they manipulate an M × N grid (1 ≤ M ≤ 15; 1 ≤ N ≤ 15) of square tiles, each of which is co

51CTO C开发频道中笔记之一(结构体和枚举)

(1)结构体和枚举是C++中的构造数据类型.构造数据类型是由基本数据类型按照一定的规则组合 在一起而构成的数据类型.枚举在C/C++中,是一个被命名的整型常数的集合. 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构.是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型. (2)结构体(struct)的使用 struct test {  float a;  int b; }; 上面的代码就定义了一个名为test的结构体,它的数据类型就是test

Objective-C中快速枚举和数组排序

快速枚举 for (<#type *object#> in <#collection#>){ } object是遍历得到的元素对象,collection是集合类型的对象:数组,字典,集合. 数组枚举得到数组中的元素对象. 字典枚举得到字典中的key值. 集合枚举得到集合中的元素对象. 1 // 数组 2 NSArray *arr = [NSArray arrayWithObjects:@"iPhone", @"demaxiya", @&quo

Objective-C学习笔记_字典、集合、数组排序

一字典类 二集合类 三数组字典集合的快速遍历 四数组排序 五数组元素按照数值大小排序 一.字典类 字典?于保存具有映射关系(key-value对)数据的集合.对于"姓名:张三"来讲,key就是"姓名",key对应的value是"张三".一个key-value对认为是?个条目,字典是存储key-value对的容器.与数组不同,字典靠key存取元素.key不能重复,value必须是对象.键值对在字典中是无序存储的.字典也分为,不可变字典(NSDict

JDK5.0新特性-枚举

枚举 枚举是什么? 它就是一个特殊的java类. 类的定义 class 类名{} 接口的定义 interface 接口名{} 枚举的定义 enum 枚举名{} 示例 public enum Demo1{} 也会生成一个class文件. 我们对其进行反编译. 定义到我们的class文件所在目录下 执行 javap Demo1 得到的结果 public final class Demo1 extends java.lang.Enum<cn.itcast.enumdemo.Demo1> { stat

Mysql常用语句总结

对MySql经常使用语句的详细总结 下面总结的知识点全是经常用的,全都是干货,好好收藏吧./* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysqld --skip-grant-tables -- 修改root密码 密码加密函数password() update mysql.user set password=password('root'); SHOW

SQl语句收藏

/* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysqld --skip-grant-tables -- 修改root密码 密码加密函数password() update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES --

PHP学习笔记------MYSQL

/* 启动MySQL */net start mysql /* 连接与断开服务器 */mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */mysqld --skip-grant-tables-- 修改root密码密码加密函数password()update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- /* 数据库操