您的位置:首页 > 其它

Codeforces Round #148 (Div. 1) ABC

2013-11-22 22:09 477 查看
题目链接

代码链接

A:

记S[i] 表示位置从0~i的数的异或值,则 i~j 的异或值等于 S[i-1]^S[j]。要找出满足任意区间异或值都不为0的序列,则转化成满足任意S[i-1] != S[j]的序列。因此答案为 A(n,2^m-1)。

B:

要使最大值与最小值差值最小,则是使最大值尽量小,最小值尽量大。将数组从小到大排序,则当前最大值为 a
+a[n-1],最小值为 a[1]+a[2]。显然任何改变分组的行为都不可能使最大值减小(因为h为正值)。因此只能考虑增大最小值,因此只需要考虑a[1]和a[2]不同组的情况是否更优,其他可以无视。

Case 1:将a[2]单独放到组2时有: 最大值为 max(a
+a[n-1],a
+a[2]+h),最小值为 min(a[1]+a[2]+h,a[1]+a[3])。

Case 2:将a[1]单独放到组2时有: 最大值为 max(a
+a[n-1],a
+a[1]+h),最小值为 min(a[1]+a[2]+h,a[2]+a[3])。

显然Case 2 有比 Case 1 更优秀,故只需要考虑将a[1]异组的情况。

C:

枚举一条边作为两个Brothers的分界线,将树分为两块,分别找出两个块的最小反向边值(此处为O(n)的树dp),相加,取一个最小值即是解。复杂度n^2。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: