HDU 5715 XOR 遊戲 二分 字典樹

2022-03-31 15:08:25 字數 1057 閱讀 2898

眾所周知,度度熊喜歡xor運算(xor百科)。

今天,它發明了一種xor新遊戲,最開始,它有乙個長度為n的陣列,度度熊可以任意新增分割線,將陣列劃分為m段,且每段長度小於等於l。

當然這是個和xor有關的遊戲,度度熊希望所有分組內異或和的最小值最大。

比如,長度為4的陣列,l為3,可以劃分為 或 或 ,最小的異或值分別為1,3,0,所以選第二種分割方法。

第一行為t,表示輸入資料組數。

對於每組資料,第一行包含三個整數n,m,l,第二行包含n個數,表示陣列。

1≤t≤300

1≤n≤10000,1≤m≤10,1≤l≤n

1≤ai≤109

對第i組資料,輸出

case #i:

然後輸出一行,僅包含乙個整數,表示滿足條件分組方法的最小異或值。

24 2 3

1 2 3 4

4 3 2

5 4 3 2

case #1:

3case #2:

2兩種方法,一種是按位分析,一種是二分答案

二分答案的話,我們令dp[i][j]表示考慮到第i個數,我劃分了j次,是否最小值的答案超過了mid

這個就直接dp轉移就好了,每次我們在字典樹裡面找到最大的a[i]^a[k],然後從dp[k][j-1]轉移過來就好了

轉移的前提是dp[k][j-1]也是合法的

#includeusing namespace std;

const int maxn = 5e5+5;

int a[maxn],n,m,k,cnt[12];

struct node

}t[12][maxn];

void add(int p,int x)

}void del(int p,int x)

}int query(int p,int x)}}

return dp[n][m];

}void solve(int cas)

printf("case #%d:\n%d\n",cas,ans);

}int main()

二分 青蛙遊戲

time limit 1 sec memory limit 128 mb submit 332 solved 137 submit status web board 青蛙王國運動會開始了,最受歡迎的遊戲是鐵蛙三項賽,其中一項是跳躍過河專案。這個專案需要青蛙運動員通過跳躍過河。河的寬度是l。在河面上有...

hdu1669 二分多重匹配 二分

n個人分成m組,求人數最多的那一組人數的最小值。每個人肯定只能匹配乙個組,但乙個組可以匹配多個人,因此屬於多重匹配。我們設定乙個limit,表示每組最多能容納的人數。在dfs u 尋找u的匹配時,如果某一組vv的人數小於limit,那麼可以把u和vv匹配,vv已經匹配的人數 1。否則,當人數已經達到...

hdu2413 二分 二分匹配

題意 地球和外星球大戰,地球有n個飛船,外星球有m個飛船,每個飛船有自己的其實戰艦和戰艦增長率,星球於星球之間有距離,問你最少多少年地球可以打敗外星球,每個星球最多只能和乙個星球對戰.思路 題意的最後一句話告訴我們這個題目滿足二分圖,我們可以二分列舉多少年打敗,每次都重新建圖,對於h i 和 a j...