題意:
給出乙個由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個元素的陣列中,只有唯一的乙個元素重複,找出這個重複的數字。要求不能使用輔助儲存空...