题目

题目: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

最新文章

  1. 分享一个css3写的气泡对话框,适合于即时通讯和留言本的动态内容
  2. 数据库分库分表(sharding)系列(一) 拆分规则
  3. Azure PowerShell (1) PowerShell整理
  4. 第9章 用内核对象进行线程同步(1)_事件对象(Event)
  5. GoJS使用
  6. C#用正则表达式对IP进行排序
  7. String、StringBuffer、StringBuilder源码分析
  8. iconv命令 gbk 转 UTF-8
  9. [转]基于四叉树(QuadTree)的LOD地形实现
  10. BerkeleyDB 多索引查询
  11. JS实例(二)
  12. Retrofit2 上传图片等文件
  13. 转:Java eclipse下 Ant build.xml实例详解
  14. 使用python爬取MedSci上的期刊信息
  15. Datatable插件的简单的使用方式 和 学习方式
  16. Abp vNext 切换MySql数据库
  17. pycharm安装配置
  18. Tomcat解决中文乱码并部署项目
  19. JMeter中的正则表达式的匹配
  20. (PMP)第8章-----项目质量管理

热门文章

  1. Android4.4.2系统添加自定义按键【转】
  2. linux下nginx模块开发入门
  3. Ural2102:Michael and Cryptography(数论&amp;素数)
  4. SimpliciTI协议栈
  5. VS2010 AnkhSvn
  6. (转)Sql Server 保留几位小数的两种做法
  7. python 模块 module 规范
  8. bzoj 2618【半平面交模板】
  9. c语言程序设计案例教程(第2版)笔记(三)—变量、结构体
  10. 《windows核心编程系列》七谈谈用户模式下的线程同步