zzuli1519 小P參加相親大會(異或)

2022-08-24 19:00:11 字數 1291 閱讀 3624

題目描述

小p最近人生得意,去參加了一次相親大會,相親大會上每個人有乙個密碼牌(密碼牌上的密碼是乙個正整數m,m<231 ),相互之間在交流之前先交換密碼牌,密碼牌上的密碼可能相同,也可能不同,如果相同,兩人牽手離開,如果不保同,各自再尋找下一位,保證最後只有1個人或2個人留下來。

輸入第一行兩個數 n,k (n≤3000000,1≤k≤2),n表示參加相親大會的人數,接下來 n行每行乙個正整數表示相親大會上每乙個人的密碼,k表示最後留在相親大會的人數。

輸出從小到大輸出一行 k個數,表示相親不成功留在相親大會人的密碼,中間用空格分隔。

樣例輸入 copy

3 122

2

樣例輸出 copy

2
提示

對於40% 的資料,保證 k=1。

對於20%的資料,保證n≤100

對於100%的資料,保證 n≤3000000,ai<

異或就是把兩個數轉換成二進位制,進行相同位上的運算,

相同為0,不同為1

也就是說相同的數異或為0,與0異或為本身。

a^a=0, a^0=a;

如果是在給出的數中找出乙個出現奇數次的數,只需要把所有的數異或剩下最後的那個數就是答案。

但是這道題有兩個數的情況,下面說的是兩個數的情況:

還是先把所有的數異或一下,最後得出的數是兩個應該輸出的兩個數異或的結果k。

把這個數轉換成二進位制,找出為1的位,要輸出的兩個數這個位乙個為0,乙個為1。

再遍歷一次陣列,把相應位上為1(或0)的數再異或一遍,最後得到兩個數中的乙個a。

再將k和a異或得到另乙個答案b。

#include#define n 3000020

int a[n];

int main()

if(k == 1)

printf("%d\n", ans);

else

r=ans;

for(i=0; i

if((a[i]/t)%2)

ans^= a[i];

printf("%d ", ans);

printf("%d\n", ans^r);

} return 0;

}

zzuli1519 小P參加相親大會(異或)

題目描述 小p最近人生得意,去參加了一次相親大會,相親大會上每個人有乙個密碼牌 密碼牌上的密碼是乙個正整數m,m 231 相互之間在交流之前先交換密碼牌,密碼牌上的密碼可能相同,也可能不同,如果相同,兩人牽手離開,如果不保同,各自再尋找下一位,保證最後只有1個人或2個人留下來。輸入第一行兩個數 n,...

ZZULI 小P參加相親大會 位運算

時間限制 2 sec 記憶體限制 16 mb 小p最近人生得意,去參加了一次相親大會,相親大會上每個人有乙個密碼牌 密碼牌上的密碼是乙個正整數m,m 231 相互之間在交流之前先交換密碼牌,密碼牌上的密碼可能相同,也可能不同,如果相同,兩人牽手離開,如果不保同,各自再尋找下一位,保證最後只有1個人或...

ZZULI 小P上考場 最短路

時間限制 1 sec 記憶體限制 128 mb 小p一覺醒來發現天已經亮了。今天是程式設計大賽的日子,小p需要盡快趕往考場。小p家在a號路口,他會告訴你哪些路口是相聯通的,距離是多少。賽場在b號路口,該市道路沒有單行道。小p想讓你幫他規劃到考場的路線,他希望找到這條最短的路線以用最短時間抵達考場。第...