NOIP模擬題 「與」(位運算)

2022-05-12 01:10:39 字數 1526 閱讀 8527

因為是與運算,所以我們可以貪心地每次找最高位的,將他們加入到新的序列中,然後每一次在這個新的序列繼續找下乙個位。

然後最後序列中任意兩個的與運算的值都是一樣的且是最大的。

#include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

#define pii pair#define mkpii make_pair#define pdi pair#define mkpdi make_pair#define pli pair#define mkpli make_pair#define rep(i, n) for(int i=0; i<(n); ++i)

#define for1(i,a,n) for(int i=(a);i<=(n);++i)

#define for2(i,a,n) for(int i=(a);i<(n);++i)

#define for3(i,a,n) for(int i=(a);i>=(n);--i)

#define for4(i,a,n) for(int i=(a);i>(n);--i)

#define cc(i,a) memset(i,a,sizeof(i))

#define read(a) a=getint()

#define print(a) printf("%d", a)

#define dbg(x) cout << (#x) << " = " << (x) << endl

#define error(x) (!(x)?puts("error"):0)

#define printarr2(a, b, c) for1(_, 1, b)

#define printarr1(a, b) for1(_, 1, b) cout << a[_] << '\t'; cout << endl

inline const ll getint()

inline const int max(const int &a, const int &b)

inline const int min(const int &a, const int &b)

} printf("%d\n", a[1]&a[n]);

return 0;

}

題目描述:

給你乙個長度為n的序列a,請你求出一對ai,aj(1<=ips:「與」表示位運算and,在c++中表示為&。

輸入描述:

第一行為n。接下來n行,一行乙個數字表示ai。

輸出描述:

輸出最大的ai「與」aj的結果。

樣例輸入:

樣例輸出:

樣例解釋:

8 and 10 = 8

8 and 2 = 0

10 and 2 = 2

資料範圍:

20%的資料保證n<=5000

100%的資料保證 n<=3*10^5,0<=ai<=10^9

NOIP模擬題 位運算 生成樹

如約而至。願不辜負。說正事,不要因為寫得很快而沾沾自喜,對拍要快快快一點啊啊啊!然後推的時候要用變數代替樣例資料,同時一定!要自己出資料。還有,一定要在思路理清楚以後認真檢查一次程式的邏輯關係,是否能達到要求,尤其是常數的使用。靜態差錯一!定!要!認真看每一句,清醒一點呀喂!現在腦子不太好使,很容易...

NOIP模擬 位運算(trie樹 按位貪心)

題目描述 有q次操作,每次操作是以下兩種 1 加入乙個數到集合中 2 查詢,查詢當前數字與集合中的數字的最大異或值,最大and值,最大or值 輸入格式 第一行1個正整數q表示操作次數 接下來q行,每行2個數字,第乙個數字是操作序號op 1,2 第二個數字是x表示操作的數字 輸出格式 輸出查詢次數行,...

NOIP模擬題 連通

給定乙個無向圖,請編寫乙個程式實現以下兩種操作 1 d x y,從原圖中刪除連線x和y頂點的邊。2 q x y,詢問x和y頂點是否連通。這也是連通問題,考慮用並查集解決。但是這是刪除的問題耶,怎麼辦?考慮將刪除變為連通,能不能將所有操作給反過來,從最後乙個操作開始處理。當然是可以的。include ...