hdu 4768 異或運算

2021-06-26 12:07:08 字數 778 閱讀 2989

貌似很多人是用的二分

但是更好的做法貌似還是異或

對於第k個人,如果他接到偶數個傳單,那麼異或的結果還是0

就是說op記錄所有收到傳單的人次的總的異或值,那麼因為只有乙個是收到奇數次,所以異或值就是他的編號,至於收到幾次,在o(n)可以計算

//#pragma comment(linker, "/stack:102400000,102400000")

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

#define ls(rt) rt*2

#define rs(rt) rt*2+1

#define ll long long

#define ull unsigned long long

#define rep(i,s,e) for(int i=s;i>1;

const double eps = 1e-8;

const double pi = acos(-1.0);

const int inf = 100000000;

const int maxn = 20010 +20;

int a[maxn],b[maxn],c[maxn],n;

int main()

else printf("%d %d\n",op,cnt);

}return 0;

}

異或運算 有趣的異或運算

異或運算可以看做是沒有進製的加法,按位異或運算,相同為0,不同為1。0 0 0 0 1 1 1 0 1 1 1 0 觀察運算結果我們發現,當與0做異或運算時,另一元值不變 而與1做異或運算時,另一元值值取反。根據以上異或運算的特徵,可以有以下用途,除方便直觀外,運算效能也更加優異。1 變數重置0 假...

HDU 4768 (二分區間 漲姿勢)

題意 告訴n組a,b,c,按照a k c生成等差數列,問這n組數列中哪個數字出現了奇數次以及出現了幾次,題目保證最多隻會出現乙個這種數字。分析 讀完題並沒有思路,後來知道是二分區間,列舉是哪個數字出現了奇數次,算該數字之前一共有幾個數字,如果是奇數個,說明答案就在 l mid 中。ps 之前用二分只...

(與運算) (或運算) (異或運算)

即 兩個運算元同為 1 的時候為1 0 0 0 1 0 1 0 1 1 1 1 1 即 兩個運算元中至少有乙個為 1 的時候為1 0 0 0 0 1 1 1 0 1 1 1 0 即 兩個運算元不同的時候為1 運算規則 1 0 0 1 即 對乙個二進位制數按位取反,即將0變1,1變0。將乙個運算物件的...