题意:给定一定数目的集合,然后每给出一对数据i,j判断是否它们在某个集合中同时出现过
因为内存卡的很严 所以这里运用位运算
1
每个整数在第i个集合中出现,则这个整数对应的数据的第i位为1,否则为0。数字最大是10000 集合最多1000组 而2^1000显然超出了数据范围 那么我们这样处理
scanf("%d",&tmp);
a = 1<<(i%32);
if((c[tmp][i/32]&a) == 0)
c[tmp][i/32] += a;
这样32×32就足够了嘛···注意这里的集合是允许有重复元素出现的 因此那个if要加
2 比较的时候
只需将对应的数据进行与运算,结果为0,则没有同时出现;否则,同时出现