cf536c——思路题
2024-08-26 06:29:44
题目
题目: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)$
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; typedef long long ll;
const int maxn = + ;
int n,a[maxn]; int main()
{
scanf("%d", &n);
for (int i = ; i < n; i++) scanf("%d", &a[i]);
sort(a, a + n);
ll ans = ;
for (int i = ; i < n / ; i++)
ans += (ll) * (a[i] + a[n - - i]) * (a[i] + a[n - - i]);
printf("%I64d\n", ans);
return ;
}
参考链接:https://codeforces.com/contest/1106/problem/C
最新文章
- 分享一个css3写的气泡对话框,适合于即时通讯和留言本的动态内容
- 数据库分库分表(sharding)系列(一) 拆分规则
- Azure PowerShell (1) PowerShell整理
- 第9章 用内核对象进行线程同步(1)_事件对象(Event)
- GoJS使用
- C#用正则表达式对IP进行排序
- String、StringBuffer、StringBuilder源码分析
- iconv命令 gbk 转 UTF-8
- [转]基于四叉树(QuadTree)的LOD地形实现
- BerkeleyDB 多索引查询
- JS实例(二)
- Retrofit2 上传图片等文件
- 转:Java eclipse下 Ant build.xml实例详解
- 使用python爬取MedSci上的期刊信息
- Datatable插件的简单的使用方式 和 学习方式
- Abp vNext 切换MySql数据库
- pycharm安装配置
- Tomcat解决中文乱码并部署项目
- JMeter中的正则表达式的匹配
- (PMP)第8章-----项目质量管理