Description 给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费用为c[1] or c[2] or ... or c[m].请求出总费用的最小值. Input 第一行包含两个正整数n,m(1<=m<=n<=500000),分别表示序列的长度和需要划分的段数. 第一行包含n个整数,其中第i个数为a[i](0<=a[i]<=10^18). Output 输出一个整数,即总费用的最…
分析:按位贪心即可. program sleep; var a,g:..]of longint; n,i,m,ans,t,len,x,y,v:longint; c:char; s:string; e:boolean; function cheak(x,y:longint):longint; var i:longint; begin to n do begin ) ); ) ); ) ); end; exit(x); end; begin assign(input,'sleep.in'); res…
题目链接:HDOJ - 5208 题目分析 使用按位贪心的思想,即从高位向低位枚举,尽量使这一位的答案为 1 . 我们使用 DFS ,每次就是对于 [l1, r1] [l2, r2] x 进行处理,其中,x 是当前处理的最高位的权值,即 2^i . 如果 A 和 B 两人的区间的最高位都确定了,那就记录这一位的答案,直接处理下一位. 如果 A 可以取 0/1 ,而 B 已经确定了,那么 A 就一定要取与 B 相反的那个. 如果 A 和 B 都能取 0/1 ,那么我们就要分支进行 DFS ,一…