题目大意:

给定n 为n个点

给定n个点的坐标

两个点(xi,yi) (xj,yj)之间的花费是 xi*yj-yi*xj (可能为负数)

要求从点1经过若干个点到点n最小花费的路径 且路径要按x轴方向(即x递增)

输出路径顺序经过的点的编号

使花费最小 而花费又可能为负数 那么就尽量使得花费为负数

所以点的方向一直为顺时针的话就能使得花费最小 也就是一个上凸包

题解:https://www.cnblogs.com/mountaink/p/9591414.html

BTW 这题似乎没有考虑精度误差 加上精度误差的判断反而会WA

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define LL long long
#define mem(i,j) memset(i,j,sizeof(i))
using namespace std;
const int N=2e5+;
const int MOD=1e9+;
const double EPS=1e-; struct P {
double x,y; int id=;
P(){} P(double x,double y):x(x),y(y){}
P operator -(P p) { return P(x-p.x,y-p.y); }
P operator +(P p) { return P(x+p.x,y+p.y); }
double dot(P p) { return x*p.x+y*p.y; }
double det(P p) { return x*p.y-y*p.x; }
bool operator <(const P& p)const {
if(x!=p.x) return x<p.x;
if(y!=p.y) return y<p.y;
return id<p.id;
}
bool operator ==(const P& p)const {
return x==p.x && y==p.y;
}
void scf() { scanf("%lf%lf",&x,&y); }
}p[N], ans[N];
int n;
int andrew() {
sort(p+,p++n);
int c=;
for(int i=;i<=n;i++) {
if(i> && p[i]==ans[c-]) continue;
while(c> && (p[i]-ans[c-]).det(ans[c-]-ans[c-])>=) {
if((p[i]-ans[c-]).det(ans[c-]-ans[c-])>) c--;
else if(ans[c-].id>p[i].id) c--;
else break;
}
ans[c++]=p[i];
}
return c;
} int main()
{
int t; scanf("%d",&t);
while(t--) {
scanf("%d",&n);
for(int i=;i<=n;i++) p[i].scf(), p[i].id=i;
int c=andrew();
for(int i=;i<c-;i++)
printf("%d ",ans[i].id);
printf("%d\n",ans[c-].id);
} return ;
}

hdu6325 /// 上凸包的更多相关文章

  1. hdu6325 Interstellar Travel 凸包变形

    题目传送门 题目大意: 给出n个平面坐标,保证第一个点和第n个点y值为0,其余点的x坐标都在中间,要从 i 点走到 j 点的要求是 i 点的横坐标严格小于 j 的横坐标,并且消耗的能量是(xi * y ...

  2. poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)

    /* poj 2187 Beauty Contest 凸包:寻找每两点之间距离的最大值 这个最大值一定是在凸包的边缘上的! 求凸包的算法: Andrew算法! */ #include<iostr ...

  3. 【BZOJ 2300】 2300: [HAOI2011]防线修建 (动态凸包+set)

    2300: [HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上 ...

  4. hdu 1348 Wall(凸包模板题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1348 Wall Time Limit: 2000/1000 MS (Java/Others)    M ...

  5. HDU ACM 1392 Surround the Trees-&gt;凸包

    分析:直接求出凸包.再算边长就可以. 另外仅仅有一个点时为0.00单独处理,两个点直接为距离也单独处理. #include<iostream> #include<cmath> ...

  6. poj 1228 凸包

    题目链接:http://poj.org/problem?id=1228 #include<cstdio> #include<cstring> #include<cmath ...

  7. poj 3608 旋转卡壳求不相交凸包最近距离;

    题目链接:http://poj.org/problem?id=3608 #include<cstdio> #include<cstring> #include<cmath ...

  8. UVa1453或La4728 凸包+枚举(或旋转卡壳)

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  9. poj 2187 凸包加旋转卡壳算法

    题目链接:http://poj.org/problem?id=2187 旋转卡壳算法:http://www.cppblog.com/staryjy/archive/2009/11/19/101412. ...

随机推荐

  1. shell编程:利用脚本实现nginx的守护自动重启

    nginx_daemon.sh #!/bin/bash # this_pid=$$ while true do ps -ef | grep nginx | grep -v grep | grep -v ...

  2. 获取图片地址url的后缀名

    getNameFromLink(url){ if(url.indexOf('.cn/') !== -1){          return (url.split('.')[url.split('.') ...

  3. 7、服务发现&服务消费者Ribbon

    公众号: java乐园 在<服务注册&服务提供者>这一篇可能学习了这么开发一个服务提供者,在生成上服务提供者通常是部署在内网上,即是服务提供者所在的服务器是与互联网完全隔离的.这篇 ...

  4. javafx将数据库内容输出到tableview表格

    一 .创建Fxml文件,用Javafx Scene Builder 编辑页面,创建tableview(表格)和tablecolum(表格中的列),并为其设置fxid: 二.生成fxml文件的控制类: ...

  5. 求背景图片左边到#box盒子左边框外侧的距离

    box{ width: 100px; height: 200px; background: pink; padding: 100px; border: 80px solid; background-i ...

  6. aiohttp上报405: Method Not Allowed

    请求方式不对,修改为“POST”或者“GET” 可参考:https://blog.csdn.net/yiifaa/article/details/80928487

  7. Socket网络编程--初级

    如果想开发一个基于TCP/IP协议的网络程序,应用程序之间则主要通过Socket交换数据 .NET Socket支持四种编程模式 1.居于阻塞模式的Socket编程 2.”非阻塞“模式的Socket编 ...

  8. idea maven springmvc mybabit 多模块管理整合

    一.安装软件jdk1.7,tomcat7.0,idea,mysql,maven 二.在idea中配置jdk 1.依次点开File -->Project Structure,点击左侧标签页,点击S ...

  9. Linux下载工具-Wget

    一.安装 进入系统后执行: # yum install wget 二.常用命令使用 以下亲测可用:[文件保存在当前命令执行的文件夹中] 1.wget下载单个文件 # wget url(文件地址,如ht ...

  10. python wave 库 读取 BytesIO 对象的注意事项

    程序中遇到需要使用临时文件时,常使用内存中的 io.BytesIO() 代替实体二进制文件,以避免磁盘IO,同时免去了考虑文件名的麻烦. file = io.BytesIO() file.write( ...