hdu5014 異或 找區間

2021-06-29 01:56:47 字數 935 閱讀 1676

題意:

給出乙個由0-n這n+1個數字組成的序列;

要求你給出另乙個序列有0-n組成,讓他們一一對應 異或相加的值最大;

輸出最大值,和你給出的序列;

思路:異或完要得到最大值,就應該要二進位制是互補的,如10110^01001;

我們的最大值是n,所以我們首先要找到和n互補的值是多少,例如找到是c和n互補;

那麼n-1和c+1互補;n-2和c+2也互補;類推;

然後在用c-1作為最大值遞迴;

至於怎麼找到和n互補;

如10110,那麼我先算出它小於等於哪個2的次方;即100000;

然後把n取反得到;11111..01001(最後5位取反了,前面都是1)

和(100000-1)做and,這樣就保留最後5位,剩下置0;

(做這道題時hdu抽風了,交上去全是超時,一直修修改改好久不知道為什麼,後來把別人a的**交上去也是超時..滿臉黑線..)

#include#includeconst int n = 1e5 + 10;

int sum;

struct uniu[n];

int m[n],num[n],n;

void f(int x)

int cur = 1;

int c;

for(int i = 0; ; i++)

c = ~x & (cur - 1);

for(int i = x,j = c; i > j; i--,j++)

if(cur != 0)

f(c - 1);

}int main()

f(n);

printf("%d\n",(1 + n) * n / 2);

for(int i = 0; i <= n; i++)

printf("\n");

}}

hdu 5014 貪心 位處理

題意略。分析 通過發現規律貪心處理即可,從n開始反向遍歷到0,假設與數i匹配的是 xi 那麼i xi的二進位制位一定全1,並且二進位制位數等於i的二進位制位數 include include include include include const int n 1e5 100 using name...

hdu 5014 思維題 推理

從小數開始模擬找方法規律,然後推廣,尤其敢猜敢嘗試,錯了一種思路繼續猜 這是一種非常重要的方法啊 這道題還是從小數開始模擬,我是依據16以內的找的規律 依據2 k 2 k 1 2 k 1 2 k 2 這樣陪下去 當2 k n的時候,從2 k 1 按相同的方法配下去,wa了非常久,是lower bou...

周賽 區間異或 題解(找規律) 異或知識講解

或在數學中的含義 乙個元素在集合a中或在集合b中,或的維恩圖如下 而異或是不允許共存的,所以 a b 的維恩圖如下 同理對於 a b c 維恩圖 異或運算 fff fttt fttt f1.1 1000放在含有1001個元素的陣列中,只有唯一的乙個元素重複,找出這個重複的數字。要求不能使用輔助儲存空...