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。
代码链接
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。
相关文章推荐
- Codeforces Round #109 (Div. 1) 题解 【ABC】
- Codeforces Round #199 (Div. 2) (ABC)
- Codeforces Round #148 (Div. 2)
- Codeforces Round #429 (Div. 2) ABC
- Codeforces Round #148 (Div. 2)
- Codeforces Round #429 (Div. 2) ABC
- Codeforces Round #148 (Div. 1)
- Codeforces Round #429 (Div. 2) ABC
- Codeforces Round #319 (Div. 2) (ABCE题解)
- Codeforces Round #429 (Div. 2) ABC
- Codeforces Round #429 (Div. 2) ABC
- Codeforces Round #429 (Div. 2) ABC
- Codeforces Round #324 (Div. 2)ABC
- Codeforces Round #429 (Div. 2) ABC
- Codeforces Round #321 (Div. 2) ABC
- Codeforces Round #429 (Div. 2) ABC
- Codeforces Round 347 div1 abc 662BD 663A
- Codeforces Round #429 (Div. 2) ABC
- Codeforces Round #Pi (Div. 2) ABCDEF已更新
- Codeforces Round #462 (Div. 2)题解ABC