HDU 4717The Moving Points warmup2 1002题(三分)
The Moving Points
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 710 Accepted Submission(s): 290
For each test case, first line has a single number N (N <= 300), which is the number of points.
For next N lines, each come with four integers X
i, Y
i, VX
i and VY
i (-10
6 <= X
i, Y
i <= 10
6, -10
2 <= VX
i , VY
i <= 10
2), (X
i, Y
i) is the position of the i
th point, and (VX
i , VY
i) is its speed with direction. That is to say, after 1 second, this point will move to (X
i + VX
i , Y
i + VY
i).
2
0 0 1 0
2 0 -1 0
2
0 0 1 0
2 1 -1 0
Case #2: 1.00 1.00
题目大意:有n个点,这些点有各自的起始坐标和x,y方向的速度,问你在什么时刻,这些点两两之间的最大距离最小,求出时刻与距离。比赛的时候写的暴力枚举,觉得三分应该靠不住,单调性并不一定是一个抛物线的样子。最大值应该是连续的,而且是个开口向上的抛物线的单调关系。某一时刻有了最小的距离之后,会越走越远。由于求最小值,会想到三分。
题目地址:The Moving Points
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdio>
using namespace std;
double eps=1e-6;
int n; //点的个数
struct mq
{
double x;
double y;
double vx;
double vy;
};
mq node[305]; double dis(mq a,mq b,double t)
{
return sqrt((a.x+a.vx*t-b.x-b.vx*t)*(a.x+a.vx*t-b.x-b.vx*t)+(a.y+a.vy*t-b.y-b.vy*t)*(a.y+a.vy*t-b.y-b.vy*t));
} double cal(double t)
{
int i,j;
double ans=0;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
ans=max(ans,dis(node[i],node[j],t));
return ans;
} int main()
{
int tes,i;
scanf("%d",&tes);
int cas=0;
while(tes--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lf%lf%lf%lf",&node[i].x,&node[i].y,&node[i].vx,&node[i].vy); double left,right,mid,mimid;
left=0,right=10000000;
while(right-left>eps)
{
mid=(left+right)/2.0,mimid=(right+mid)/2.0;
if(cal(mid)<cal(mimid))
right=mimid;
else
left=mid;
} printf("Case #%d: %.2f %.2f\n",++cas,mid,cal(mid));
} return 0;
} /*
45
2
0 0 1 0
2 0 -1 0
2
-1000000 0 1 0
1000000 0 -1 0
2
1000000 0 0 0
-1000000 0 0 0
2
1000000 1000000 0 0
-1000000 -1000000 0 0
3
2 2 0 0
1 1 0 0
4 4 0 0
*/
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdio>
using namespace std;
double eps=1e-6;
int n;
struct mq
{
double x;
double y;
double vx;
double vy;
};
mq node[305];
double ps,pt; void cal()
{
double fent=10000000;
double l=0,r=fent,t;
int i,j;
while(fent>eps)
{
for(t=l; t<=r; t+=fent)
{
double tmp=0;
for(i=0; i<n; i++)
for(j=i+1; j<n; j++)
{
double a,b,c,d;
a=node[i].x+node[i].vx*t;
b=node[i].y+node[i].vy*t;
c=node[j].x+node[j].vx*t;
d=node[j].y+node[j].vy*t;
double sq=sqrt((a-c)*(a-c)+(b-d)*(b-d));
if(sq>tmp)
tmp=sq;
}
if(tmp<ps)
{
ps=tmp;
pt=t;
}
}
if(pt<fent)
{
l=0,r=fent;
}
else
{
l=pt-fent,r=pt+fent;
}
fent=fent/10.0;
}
}
int main()
{
int tes,i;
scanf("%d",&tes);
int cas=0;
while(tes--)
{
scanf("%d",&n);
for(i=0; i<n; i++)
scanf("%lf%lf%lf%lf",&node[i].x,&node[i].y,&node[i].vx,&node[i].vy); ps=100000000.0;
cal();
printf("Case #%d: %.2f %.2f\n",++cas,pt,ps);
}
return 0;
} /*
45
2
0 0 1 0
2 0 -1 0
2
-1000000 0 1 0
1000000 0 -1 0
2
1000000 0 0 0
-1000000 0 0 0
2
1000000 1000000 0 0
-1000000 -1000000 0 0
3
2 2 0 0
1 1 0 0
4 4 0 0
*/
HDU 4717The Moving Points warmup2 1002题(三分)的更多相关文章
- hdu 4717 The Moving Points(第一个三分题)
http://acm.hdu.edu.cn/showproblem.php?pid=4717 [题意]: 给N个点,给出N个点的方向和移动速度,求每个时刻N个点中任意两点的最大值中的最小值,以及取最小 ...
- HDU 4717 The Moving Points (三分)
The Moving Points Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- HDUOJ---The Moving Points
The Moving Points Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- HDOJ 4717 The Moving Points
The Moving Points Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- HDU-4717 The Moving Points(凸函数求极值)
The Moving Points Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)
HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...
- HDU 2802 F(N)(简单题,找循环解)
题目链接 F(N) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- The Moving Points hdu4717
The Moving Points Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- F. Moving Points 解析(思維、離散化、BIT、前綴和)
Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...
随机推荐
- 泰晓科技 +兰大开源社区 +程序动态分析---LINUX内核网站
http://www.tinylab.org/ http://linux-talents.tinylab.org/lzuoss/ http://www.tinylab.org/source-code- ...
- poj3348 Cows 凸包+多边形面积 水题
/* poj3348 Cows 凸包+多边形面积 水题 floor向下取整,返回的是double */ #include<stdio.h> #include<math.h> # ...
- Execution Contexts (执行上下文)
本章我们一起讨论一下ECMAScript的执行上下文及相关可执行代码的各种类型.so...什么是执行上下文?我们来看看定义: 每次当控制器转到ECMAScript可执行代码的时候, 即会进入到一个执行 ...
- Writing Your First Test
Let's say you have an activity layout that represents a welcome screen: <?xml version="1.0&q ...
- hadoop集群环境搭建准备工作
一定要注意hadoop和linux系统的位数一定要相同,就是说如果hadoop是32位的,linux系统也一定要安装32位的. 准备工作: 1 首先在VMware中建立6台虚拟机(配置默认即可).这是 ...
- LiLei&HanMeiMei的隐式马尔可夫爱情
一篇非常棒的隐马尔可夫入门文章...推荐! from: http://staffwww.dcs.shef.ac.uk/people/W.Liu/hmm.html
- 文档对象模型操作xml文档
简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...
- 在Weex中定制自定义组件
1.配置自定义组件 public class MyViewComponent extends WXComponent{ public MyViewComponent(WXSDKInstance ins ...
- java 基本类型和包装类的比较
public class BoxingTest { @Test public void test1(){ String a = new String("1"); String b ...
- 一次利用MSSQL的SA账户提权获取服务器权限
遇到小人,把服务器整走了 自己手里只有sql server的sa账号密码 模糊记起之前用这个账户提权读取文件的事 百度之,发现相关信息一堆堆 各种工具也用了不少 发现不是语法错误就是权限不够 无奈之下 ...