題目描述
小p最近人生得意,去參加了一次相親大會,相親大會上每個人有乙個密碼牌(密碼牌上的密碼是乙個正整數m,m<231 ),相互之間在交流之前先交換密碼牌,密碼牌上的密碼可能相同,也可能不同,如果相同,兩人牽手離開,如果不保同,各自再尋找下一位,保證最後只有1個人或2個人留下來。
輸入第一行兩個數 n,k (n≤3000000,1≤k≤2),n表示參加相親大會的人數,接下來 n行每行乙個正整數表示相親大會上每乙個人的密碼,k表示最後留在相親大會的人數。
輸出從小到大輸出一行 k個數,表示相親不成功留在相親大會人的密碼,中間用空格分隔。
樣例輸入 copy
3 122樣例輸出 copy2
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想讓你幫他規劃到考場的路線,他希望找到這條最短的路線以用最短時間抵達考場。第...