題意:給定一定數目的集合,然后每給出一對數據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,則沒有同時出現;否則,同時出現