PKU 2443 位运算

题意:给定一定数目的集合,然后每给出一对数据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,则没有同时出现;否则,同时出现

posted on 2008-02-18 16:02 Victordu 阅读(1191) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(5)

随笔档案(46)

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜