題目大意:在集合中找出 k (k≤2)個出現了奇數次的正整數 a。
注意記憶體:2mb
當k=1的時候,我們可以對所有的數求異或和,得到的異或和即為a,因為出現偶數次的都兩兩消掉了。
k=2的時候,我們得到的異或和是a^b。
對於二進位制的每一位維護cnt[i]表示有多少數二進位制的第i位中1,c[i]表示所有第i位為1的數的異或和。
如果ans中某一位是1,那麼說明a,b兩個數中有乙個數該位是1,那麼對應的c[i]就是其中乙個數的答案。對應ans取異或就可以得到另乙個數的答案。
#include
#include
using namespace std;
int c[37],cnt[37],n,k,ans;
int main()
if (k==1)
int a,b;
for (int i=31;i>=0;i--)
if (cnt[i]%2) a=c[i];
b=ans^a;
if (bprintf("%d
%d\n",a,b);
}
LOJ6087 毒瘤題 題解
n 個數的陣列,其中恰好有 k 個數出現了奇數次。把他們找出來。n 3e6,k 2 空間 2m k 1 直接全部異或起來。k 2 假設出現奇數次的是 a 和 b,那麼把所有數異或起來得到的就是 s a b。對每個二進位制位維護乙個數 w i 當讀入乙個 x,x 的第 j 位為 1 的時候,就把 w ...
LOJ 皇宮看守
題目鏈結 點加權的最小覆蓋 題目說的很清楚,用最少的點覆蓋所有的點。題目給出的是個樹,所以可以用動態規劃來解決。給出如下定義 f i,0 表示i點不放,i可以被父親節點觀察到 f i,1 表示i點不放,i可以被兒子節點觀察到 f i,2 表示i點放,在i處設定警衛 轉移如下 1 由f i,0 定義可...
loj冪方分解
問題描述 任何乙個正整數都可以用2的冪次方表示。例如 137 27 23 20 同時約定方次用括號來表示,即ab 可表示為a b 由此可知,137可表示為 2 7 2 3 2 0 進一步 7 22 2 20 21用2表示 3 2 20 所以最後137可表示為 2 2 2 2 2 0 2 2 2 0 ...