HDU4717 The Moving Points(三分)
来源:互联网 发布:sublime text3写c语言 编辑:程序博客网 时间:2024/05/18 20:47
题意:给n个点初始位置和初始速度, 问哪时候最远的两个点距离最小。
思路:对于任意时刻i j两点距离的平方为一个关于时间t 的二次方程, di^2 = ai * t^2 + bi * t + ci的形式,对于任意时刻任意两点距离最大值其实就是,F(t) = max { sqrt(di^2) } ,画在坐标系中可以看出这总是一个下凸的图形,这样利用三分就可快速求解
#include<cstdio>#include<cstring>#include<algorithm>typedef long long ll;const int maxn = 5 * 1e4 + 10;const double INF = 1e18;const double eps = 1e-10;using namespace std;ll a[maxn], b[maxn], c[maxn];ll x[maxn], y[maxn];ll vx[maxn], vy[maxn];int T, n, kase = 1, num;double f(ll a, ll b, ll c, double t) { return t * t * a + t * b + c; }double F(double t) { double ans = - INF; for(int i = 0; i < num; i++) { ans = max(ans, f(a[i], b[i], c[i], t)); } return ans;}int main() { scanf("%d", &T); while(T--) { scanf("%d", &n); num = 0; for(int i = 0; i < n; i++) { scanf("%lld %lld", &x[i], &y[i]); scanf("%lld %lld", &vx[i], &vy[i]); } for(int i = 0; i < n; i++) { for(int j = i + 1; j < n; j++) { ll dvx = vx[j] - vx[i]; ll dvy = vy[j] - vy[i]; ll dx = x[j] - x[i]; ll dy = y[j] - y[i]; a[num] = dvx * dvx + dvy * dvy; b[num] = 2 * (dvx * dx + dvy * dy); c[num] = dx * dx + dy * dy; num++; } } double L = 0, R = 1e9; while(R - L > eps) { double t1 = L + (R - L) / 3; double t2 = R - (R - L) / 3; if(F(t1) < F(t2)) R = t2; else L = t1; } double ans = sqrt(F(R)); printf("Case #%d: %.2f %.2f\n", kase++, R, ans); } return 0;}
0 0
- HDU4717 The Moving Points(三分)
- hdu4717 The Moving Points 三分
- hdu4717 The Moving Points
- HDU4717-The Moving Points
- hdu4717-(The Moving Points)
- 【hdu4717】The Moving Points
- hdu4717 The Moving Points 三分求函数最小值
- HDU4717 :The Moving Points(三分法)
- hdu4717 The Moving Points(二分做法)
- hdu 4717 The Moving Points(三分)
- hdu 4717 The Moving Points(三分)
- HDU 4717 The Moving Points (三分)
- HDU 4717 The Moving Points (三分搜索)
- HDU 4717 The Moving Points(三分枚举)
- HDOJ 4747 - The Moving Points 三分搜索...
- hdu 4717 - The Moving Points(三分)
- HDU 4717 The Moving Points(三分)
- hdu 4717 The Moving Points(三分)
- hibernate查询少量数据缓慢问题
- Bitmap使用举例
- Spring AOP工作机制进一步理解(总结篇)
- linux初始化配置网卡
- 用栈模拟汉诺塔问题
- HDU4717 The Moving Points(三分)
- 源码编译之OPENNI2去驱动Kinect2.0
- 02-线性结构4 Pop Sequence (25分)
- Android实现自定义PasswordInputView密码输入
- quick cocos 读取文件
- 第七章 动态创建标记 优化图片库
- Android导入多个Module时包冲突解决办法
- Unity中的网格与材质球合并
- mysql 创建存储函数