眾所周知,度度熊喜歡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...