cf536c——思路题

Posted lfri

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf536c——思路题相关的知识,希望对你有一定的参考价值。

题目

题目:Lunar New Year and Number Division

题目大意:给定一个数字序列,可以任意分组(可调整顺序),但每组至少两个,求每组内数字和的平方的最小值

思路

首先,易证两两分组是最好的。

其次,我们假设将序列${a_i}$分成序列${b_i}$和${c_i}$,所以

$$sum=frac{1}{2}sum_{i=1}^{n}(b_i+c_i)^2$$

我们不关心这部分(因为不管怎么划分,这部分值都不会变):

$$frac{1}{2}sum_{i=1}^{n}(b_i^2+c_i^2)$$

我们仅需考虑$sum_{i=1}^{n}b_ic_i$的最小值,由Rearrangement Inequality(排序原理)知,我们须将大者与小者两两结合。

时间复杂度:$mathcal{O}(n log n)$

代码

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 typedef long long ll;
 7 const int maxn = 300000 + 10;
 8 int n,a[maxn];
 9 
10 
11 int main()
12 {
13     scanf("%d", &n);
14     for (int i = 0; i < n; i++)  scanf("%d", &a[i]);
15     sort(a, a + n);
16     ll ans = 0;
17     for (int i = 0; i < n / 2; i++)
18         ans += (ll)1 * (a[i] + a[n - 1 - i]) * (a[i] + a[n - 1 - i]);
19     printf("%I64d
", ans);
20     return 0;
21 }

 

 

参考链接:https://codeforces.com/contest/1106/problem/C

 

以上是关于cf536c——思路题的主要内容,如果未能解决你的问题,请参考以下文章

题解 CF1063B Labyrinth

CF115BLawnmower[贪心,模拟]

省选前的CF题

IndiaHacks 2016 - Online Edition (CF) . D

CF767C 记录错误

CF1557E Assiut Chess(交互题)