題意:給定一定數(shù)目的集合,然后每給出一對(duì)數(shù)據(jù)i,j判斷是否它們?cè)谀硞€(gè)集合中同時(shí)出現(xiàn)過
因?yàn)閮?nèi)存卡的很嚴(yán) 所以這里運(yùn)用位運(yùn)算
1
每個(gè)整數(shù)在第i個(gè)集合中出現(xiàn),則這個(gè)整數(shù)對(duì)應(yīng)的數(shù)據(jù)的第i位為1,否則為0。數(shù)字最大是10000 集合最多1000組 而2^1000顯然超出了數(shù)據(jù)范圍 那么我們這樣處理
?? scanf("%d",&tmp);
??a = 1<<(i%32);
??if((c[tmp][i/32]&a) == 0)
????? c[tmp][i/32] += a;
這樣32×32就足夠了嘛···注意這里的集合是允許有重復(fù)元素出現(xiàn)的 因此那個(gè)if要加
2 比較的時(shí)候
只需將對(duì)應(yīng)的數(shù)據(jù)進(jìn)行與運(yùn)算,結(jié)果為0,則沒有同時(shí)出現(xiàn);否則,同時(shí)出現(xiàn)