題意:給定一定數(shù)目的集合,然后每給出一對數(shù)據(jù)i,j判斷是否它們在某個集合中同時出現(xiàn)過
因為內(nèi)存卡的很嚴(yán) 所以這里運用位運算
1
每個整數(shù)在第i個集合中出現(xiàn),則這個整數(shù)對應(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)的 因此那個if要加
2 比較的時候
只需將對應(yīng)的數(shù)據(jù)進行與運算,結(jié)果為0,則沒有同時出現(xiàn);否則,同時出現(xiàn)