[CF460E]Roland and Rose
题意:给定$n$和$r$,要找$n$个整点,使得他们两两距离的平方和最大,并且所有点到原点的距离必须小于$r$
很容易猜到答案在凸包上然后暴力找,但证明还是挺妙的
首先转化一下距离平方和
令$\vec{a_i}=\vec{OA_i}$,则$\sum\limits_{i\lt j}A_iA_j^2=\dfrac{\sum\limits_{i\neq j}A_iA_j^2}{2}=\dfrac{\sum\limits_{i\neq j}(\vec{a_i}-\vec{a_j})^2}{2}=\dfrac{\sum\limits_{i\neq j}(\vec{a_i}^2+\vec{a_j}^2-2\cdot\vec{a_i}\cdot\vec{a_j})}{2}$
对于每个$k$,当$i=k$时$\vec{a_k}^2$被计算$n-1$次,当$i\neq k$时被计算$n-1$次
再用和的平方公式处理一下两两做点积的项
原式$=\dfrac{2(n-1)\sum\limits_{1\leq i\leq n}\vec{a_i}^2-2[(\sum\limits_{1\leq i\leq n}\vec{a_i})^2-\sum\limits_{1\leq i\leq n}\vec{a_i}^2]}{2}=n\sum\limits_{1\leq i\leq n}\vec{a_i}^2-(\sum\limits_{1\leq i\leq n}\vec{a_i})^2$
为了让第一项尽可能大,选的点应该尽可能远离原点,为了让第二项尽可能小,选的点应该尽可能可以互相抵消(因为是向量和)
这提示了我们答案会分布在凸包上,下面我们来严格证明
假设已经确定了$A_{1\cdots n-1}$我们想确定最后一个点,设它为$P(x,y)$
新增加的距离平方和为$\sum\limits_{1\leq i\leq n-1}[(x-x_i)^2+(y-y_i)^2]$
整理一下,得到$(n-1)[(x-\frac{\sum\limits_{1\leq i\leq n-1}x_i}{n-1})^2-(\frac{\sum\limits_{1\leq i\leq n-1}x_i}{n-1})^2+\frac{\sum\limits_{1\leq i\leq n-1}x_i^2}{n-1}+(y-\frac{\sum\limits_{1\leq i\leq n-1}y_i}{n-1})^2-(\frac{\sum\limits_{1\leq i\leq n-1}y_i}{n-1})^2+\frac{\sum\limits_{1\leq i\leq n-1}y_i^2}{n-1}]$
后面那一大坨东西跟$x,y$无关,所以问题转换为求离$X(\dfrac{\sum\limits_{1\leq i\leq n-1}x_i}{n-1},\dfrac{\sum\limits_{1\leq i\leq n-1}y_i}{n-1})$最远的点
下面证$P$在凸包端点上
假设$P$不在凸包端点上,延长$XP$与凸包某边$AB$交于$P'$(交于端点直接取端点为更优解)
若$\angle AP'X\geq\dfrac{\pi}{2}$,则$AX\gt XP'\gt XP$,即选$A$更优
若$\angle BP'X\geq\dfrac{\pi}{2}$,则$BX\gt XP'\gt XP$,即选$B$更优
就这样证完了
所以一开始找一下凸包,然后暴力找到最优解
算一下就知道$r=29$的时候凸包的点数量最多,有$36$个,一点都不虚其实还是得感谢CF的评测机
我居然能找到一道Div2的E是暴力23333
#include<stdio.h> #include<math.h> #include<vector> using namespace std; struct point{ int x,y; point(int a=0,int b=0){ x=a; y=b; } }t; point operator-(point a,point b){ return point(a.x-b.x,a.y-b.y); } int operator*(point a,point b){ return a.x*b.y-a.y*b.x; } vector<point>p; vector<int>now,bes; int n,r,ans; void dfs(int chos,int las,int sx,int sy,int sx2,int sy2){ if(chos==n){ if(ans<n*(sx2+sy2)-sx*sx-sy*sy){ ans=n*(sx2+sy2)-sx*sx-sy*sy; bes=now; } return; } for(int i=las;i<p.size();i++){ now.push_back(i); dfs(chos+1,i,sx+p[i].x,sy+p[i].y,sx2+p[i].x*p[i].x,sy2+p[i].y*p[i].y); now.pop_back(); } } int main(){ scanf("%d%d",&n,&r); int i,s; for(i=-r;i<=0;i++){ p.push_back(point(i,(int)sqrt(r*r-i*i))); while(p.size()>2&&(p[p.size()-2]-p[p.size()-3])*(p[p.size()-1]-p[p.size()-2])>=0){ p[p.size()-2]=p[p.size()-1]; p.pop_back(); } } s=p.size(); for(i=s-2;i>=0;i--)p.push_back(point(-p[i].x,p[i].y)); for(i=1;i<s;i++)p.push_back(point(-p[i].x,-p[i].y)); for(i=s-2;i>0;i--)p.push_back(point(p[i].x,-p[i].y)); ans=0; dfs(0,0,0,0,0,0); printf("%d\n",ans); for(i=0;i<n;i++)printf("%d %d\n",p[bes[i]].x,p[bes[i]].y); }
[CF460E]Roland and Rose的更多相关文章
- Codeforces Round #262 (Div. 2) E. Roland and Rose 暴力
E. Roland and Rose Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/pro ...
- Codeforces 460E Roland and Rose(暴力)
题目链接:Codeforces 460E Roland and Rose 题目大意:在以原点为圆心,半径为R的局域内选择N个整数点,使得N个点中两两距离的平方和最大. 解题思路:R最大为30.那么事实 ...
- Codeforces 459E Roland and Rose
本以为是个树形DP,按照树形DP的方法在那里dfs,结果WA到死,因为它存在有向环,不是树,凡是存在环的情况切记不要用树形的方法去做 题目的突破点在于将边排完序之后,用点表示以该点为边结尾的最大长度, ...
- Codeforces 460 DE 两道题
D Little Victor and Set 题目链接 构造的好题.表示是看了题解才会做的. 假如[l,r]长度不超过4,直接暴力就行了. 假如[l,r]长度大于等于5,那么如果k = 1,显然答案 ...
- 用rose画UML图(用例图,活动图)
用rose画UML图(用例图,活动图) 首先,安装rose2003,电脑从win8升到win10以后,发现win10并不支持rose2003的安装,换了rose2007以后,发现也不可以. 解决途径: ...
- 解决Rational Rose 中 没有 Data modeler 选项的问题
在 Rose 没有 Data modeler 选项的原因是没有将 Data modeler 这块功能勾选上. 解决方案: 菜单栏--Add-Ins--Add-Ins Manager-->找到 ...
- Rational Rose
Rational Rose简明实用教程 http://furzoom.com/rational-rose-course/ Unidirectional Association 单向关联 general ...
- 带领大家安装Rational rose
Rational rose下载地址:http://pan.baidu.com/s/1hqIIyJq?qq-pf-to=pcqq.c2c 下载好后,文件里有4个安装文档: 解压CD1和CD2到当前目录, ...
- UML基础与Rose建模实训教程
目 录 第1章 初识UML. 1 1.1 初识UML用例图... 1 1.2 初识UML类图... 3 第2章 Rational Rose工具... 6 2.1 安装与配置Rational Ro ...
随机推荐
- Android-使用ViewFlipper实现轮番切换广告栏
所谓的轮番切换广告栏,指的是下面这个东西,笔主不知道该怎么确切描述这货... 笔主没有百度研究过其他大牛是怎么实现这个功能的,在这里笔主充分发挥DIY精神,利用ViewFlipper闭门土制了一个,下 ...
- 解决echarts中X轴文字过长的问题。【转】
axisLabel: { interval: , formatter:function(value) { debugger var ret = "";//拼接加\n返回的类目项 ; ...
- greendao的基本操作
1.先配置项目的builder.gradle // Top-level build file where you can add configuration options common to all ...
- iconfont字体图标
1.1.进入阿里图标网站 http://www.iconfont.cn/ 1.2.在购物车里添加自己需要的字体图标 1.3.下载代码 1.4.解压过后,找到iconfont.css,放在你的项目里,需 ...
- 前端面试:css预处理
css预处理定义: 定义了一种新的语言,其基本思想是用一种专门编程语言,为css增加了一些编程的特性,将css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作. 几种预处理语言 sass l ...
- Android百度定位地图使用--文章集锦
Android百度定位API使用方法 Android百度地图开发(一)之初体验 AndroidNote013.在百度地图上画出轨迹 Android学习笔记之百度地图(分条目覆盖物:ItemizedOv ...
- [洛谷P1528] 切蛋糕
洛谷题目链接:切蛋糕 题目描述 Facer今天买了n块蛋糕,不料被信息组中球球等好吃懒做的家伙发现了,没办法,只好浪费一点来填他们的嘴巴.他答应给每个人留一口,然后量了量每个人口的大小.Facer有把 ...
- 浏览器web端详解
一.背景介绍浏览器是前端工程师或页面重构师工作中必不可少的,WEB页面运行在各种各样的浏览器当中,浏览器载入.渲染页面的速度直接影响着用户体验,特别是浏览器渲染页面的原理,页面渲染就是浏览器将HTML ...
- Nginx的主要配置参数说明
#定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_processes 8; #全局错误日志定义类型,[ debug | in ...
- python Fielddata is disabled on text fields
# 执行https://www.elastic.co/guide/cn/elasticsearch/guide/current/_aggregation_test_drive.html中的例子时报错F ...