NOIP2018 模擬題 小P的集合 思維

2021-09-11 04:05:13 字數 744 閱讀 7926

題目大意:有n個數字,其中有k個數字出現了奇數次,求這k個數字,其中記憶體只給4mb,k<=2

題目思路:由於記憶體極小,所以很容易想到應該是通過位來得到結果。首先是假如只有乙個數字是奇數次,那麼很簡單直接全異或起來,那些出現偶數次的就全消掉了,剩下來的就是答案。如果有兩個的話,就說明我們得到的結果是答案異或的結果,那麼就需要得到答案之一才能得到所有答案。答案所具有的特點是,一定存在有乙個位是只有奇數個1的,所以我們要是能夠得到在該位是1的所有數字的異或結果就能得到這個數字本身(其他都消掉了)。那就開乙個32的記憶體,然後對於每乙個x,在他是1的位的位置都異或上x,最後對剛才得到的全異或的結果進行搜尋,找到乙個為1的位置就把這個位置所對應的異或結果取出來,就是答案之一,與結果再異或就是另乙個答案

以下是**:

#includeusing namespace std;

#define inf 0x3f3f3f3f

#define rep(i,a,b) for(int i=a;i<=b;i++)

#define per(i,a,b) for(int i=a;i>=b;i--)

#define ll long long

using namespace std;

const int maxn = 2e4+5;

const int maxm = 1e5+5;

int a[32];

int main()

}return 0;

}

NOIP2018模擬賽 小P的西洋棋

題目描述 小p迷上了一種新西洋棋,這種西洋棋的棋盤是兩個序列,乙個序列是自己的部分,另乙個序列是對手的。在序列中,每一格都是乙個士兵,士兵們的初始戰鬥力不同。在新西洋棋種獲勝方式是這樣的 有q次對決,每次對決雙方序列的兩個區間,如果小p在這個區間內的士氣和大於對手在這個區間內的士氣和,那麼小p需要說...

NOIP2018模擬9 15總結

就是這樣 分數100 80 60 240 rank1 暴力真是爽 t1題意 有n個點,m條邊,k個特殊點,邊權為1 求每個點到離他最遠的特殊點的最短距離 nk 10000000 顯然暴力 t1 include define n 300001 using namespace std int i,j,k...

noip2018模擬題(類揹包 貪心)

馬拉松冰球賽 marathon.pas c cpp 馬拉松冰球錦標賽的日子就要到了。正如馬拉松冰球比賽中經常出現的那樣,比賽時間 是m分鐘。和常規的冰球比賽一樣,在每一給定時刻,場上兩隊各有6名球員。然而,一 場馬拉松冰球比賽可以持續很長時間,所以教練帶了一群球員,這樣當球員們累了的時候,他們可以進...