UVALive 5873 (几何+思维)
唉 被秀了。。。 还是太弱,说好的数形结合呢,列个式子出来后就被吓到了,然后就懵逼了。
题意:
有一条狗,从原点出发,沿n个向量走,每个向量只走一次,沿着一个向量(x,y)走时,既可以往(x,y)方向走,也可以往(-x,-y)方向走。 然后问这条狗离原点最远的距离。
如果写成方程:
n个向量分别表示为: (x1,y1) (x2,y2) (x3,y3) ... (xn,yn)
第i个向量往(xi,yi)方向则ai=1,否则ai=-1
则ans = (a1*x1+a2*x2+...+an*xn)^2 + (a1*y1+a2*y2+...+an*yn)^2
要你给出一个(a1,a2,...,an)使得ans最大。
我以为写出方程形式会有助于做题,然并卵。。。
这题还是要用直观的方法理解。。。
数形结合方法:
定理1:如果把一个向量的正方向和反方向都算上,那么最优解的n个向量必然在一个半平面内。
证明: 假设最优解中的n个向量不在一个半平面内,一定可以找到一个直线l,使得直线左右两边都存在向量,那么将直线l左边的向量都转变为其反向量,那么结果一定大于最优解。
定理2: 如果把一个向量的正方向和反方向都算上,并以对x正半轴夹角排序,则连续的n个向量必两两不同(即不会存在一个向量的正向量和反向量都存在的情况)。
证: 显然。
由这两个定理,那么这题就很好做了,把所有的(xi,yi)(-xi,-yi)都算上,然后进行极角排序,枚举连续的n个记录最大值即可。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define N 110
const double PI = acos(-1.0);// PI struct node
{
int x,y;
double ang;
}g[*N]; double GetAngle(double x,double y)
{
double tmp=atan2(y,x);
if(tmp<) tmp=*PI+tmp;
return tmp;
} double dis(int x,int y)
{
return sqrt((double)x*x+(double)y*y);
} int cmp(node t1,node t2)
{
return t1.ang<t2.ang;
} //泥煤,完全想错了。。。 int main(int argc, const char * argv[]) {
int n;
while(scanf("%d",&n) && n)
{
int cnt=;
for(int i=;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
g[cnt].x=x; g[cnt].y=y; g[cnt].ang=GetAngle(x, y);
cnt++;
g[cnt].x=-x; g[cnt].y=-y; g[cnt].ang=GetAngle(-x, -y);
cnt++;
}
sort(g,g+cnt,cmp);
int pi,pj;
pi=;
double ans=;
for(;pi<cnt;pi++)
{
int x=,y=;
pj=pi;
for(int j=;j<n;j++)
{
x+=g[pj].x;
y+=g[pj].y;
pj=(pj+)%cnt;
}
ans=max(ans,dis(x,y));
}
/*
ans*=10000;
int tmp=((long long)ans)%10;
ans/=10;
if(tmp>5) ans++;
ans/=1000;
char strans[110];
sprintf(strans,"%lf",ans);
for(int i=0;i<100;i++)
{
if(strans[i] == '.')
{
printf("%c",strans[i]);
for(int j=0;j<3;j++)
{
printf("%c",strans[i+1+j]);
}
break;
}
else printf("%c",strans[i]);
}
printf("\n");
*/
printf("%.3lf\n",ans);
}
return ;
}
PS:最后题目中说的四舍五入是扯淡,直接%.3lf即可。
UVALive 5873 (几何+思维)的更多相关文章
- UVALive.3708 Graveyard (思维题)
UVALive.3708 Graveyard (思维题) 题意分析 这标题真悲伤,墓地. 在周长为1e4的圆周上等距分布着n个雕塑,现在要加入进来m个雕塑,最终还要使得这n+m个雕塑等距,那么原来的n ...
- LightOJ 1058 - Parallelogram Counting 几何思维
http://www.lightoj.com/volume_showproblem.php?problem=1058 题意:给你顶点,问能够成多少个平行四边形. 思路:开始想使用长度来扫描有多少根,但 ...
- 几何+思维 Samara University ACM ICPC 2016-2017 Quarterfinal Qualification Contest K. Revenge of the Dragon
题目链接:http://codeforces.com/gym/101149/problem/K 题目大意: 给你两个点a,b.一个人在a点,一个人在b点,b点的人要追杀a的点,他的跑步速度是a的两倍. ...
- UVALive - 6442 (思维题)
题目链接:https://vjudge.net/contest/241341#problem/I 题目大意:给你一个有N个点等距的环,编号[0,N-1],然后有些点上有一个或多个硬币,通过移动这些硬币 ...
- UVALive - 6434 (思维题)
题目链接:https://vjudge.net/contest/241341#problem/A 题目大意,给你n个数字,让你分成m组,每组的花费为每组的最大值-最小值,总的花费就是各组花费相加,要求 ...
- UVALive - 6439(思维题)
题目链接:https://vjudge.net/contest/241341#problem/F 题目大意:给你一个字符串,你可以用任意单个字符代替其中的一个子串,使它形成一个回文串,要求形成的回文串 ...
- EOJ Monthly 2018.7 B.锐角三角形(数学几何+思维)
描述 是否存在面积为S/2的整点锐角三角形?存在输出Yes并输出三个整点坐标,否则输出No. 注意如果存在输出的坐标必须在long long范围内. Input 第一行一个整数S(1<=S< ...
- [CodeForces]CodeForces 13D 几何 思维
大致题意: 给出N个红点和M个蓝点,问可以有多少个红点构成的三角形,其内部不含有蓝点 假设我们现在枚举了一条线段(p[i],p[j]),我们可以记录线段下方满足(min(p[i].x,p[j].x)& ...
- UVALive - 6434 —(思维题)
题意:给出了你由n个数组成的序列,让你将这个序列分为成m个集合,使得每一个集合的最大值减最小值的差相加最小.(如果某集合只有一个数字,则最大值减最小值为0) . 思路:首先我们不难想到,最优的分配方法 ...
随机推荐
- 奇怪也哉!做一个WebApp居然遇到了FF浏览器进不去某页的问题。
一个小WebApp,原定login完后就进某页面.前天晚上之前一直在FF浏览器上调试,都正常. 前天晚上稍修改了,提交war上传,之后就休息了. 昨天晚上有些事情处理打开一看,乖乖,点登录后就在登陆页 ...
- asp.net 中点击button弹出模式对话框,选择值后返回到页面中(window.showModalDialog实现)
<td>现从事专业</td><td> <asp:TextBox ID="tbMajor" runat="server ...
- n皇后问题[分支限界法]
问题: 如何能够在 n×n 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上. 分析: 我们可以用一串数字来表示问题 ...
- ios 第三方qq登陆,号码禁止授权
在以下加入測试账号就可以 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpbmNleGlhb2hhbw==/font/5a6L5L2T/fontsiz ...
- SSH框架阶段 ——SSH的优缺点,使用场景?
Hibernate优点: (1) 对象/关系数据库映射(ORM)它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想(2) 透明持久化(persistent)带有持久化状 ...
- 集成ueditor工具
摘要: 摘要: 版权声明:本文为博主原创文章,未经博主允许不得转载. UEditor 是百度的一套开源的在线HTML编辑器. 第一步:去官网看官网文档,了解这个工具如何使用以及下载,本人下载的是1.4 ...
- mac使用git管理Github
工欲善其事,必先利其器. 在OS X Yosemite 10.10.3安装最新版本号Xcode.在terminal下能够发现git已经被安装. ~ mesut$ git --version git v ...
- 利用Python读取文件名并生成txt文件——以图片文件为例
效果如下: 代码: import os class ReadImageName(): def __init__(self): self.path = '.' def readname(self): f ...
- oracle10g安装,卸载
一.安装 1.因为oracle的特殊性,笔者选择通过虚拟机安装windows7旗舰版安装数据库,大家的系统假设是windows xp.windows 7,windows 8能够直接安装,windows ...
- unity free asset
Unity Test Tools https://www.assetstore.unity3d.com/#/content/13802 Sample Assets (beta) https://www ...