貌似很多人是用的二分
但是更好的做法貌似還是異或
對於第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。將乙個運算物件的...