hdu6325 /// 上凸包
题目大意:
给定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 /// 上凸包的更多相关文章
- hdu6325 Interstellar Travel 凸包变形
题目传送门 题目大意: 给出n个平面坐标,保证第一个点和第n个点y值为0,其余点的x坐标都在中间,要从 i 点走到 j 点的要求是 i 点的横坐标严格小于 j 的横坐标,并且消耗的能量是(xi * y ...
- poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)
/* poj 2187 Beauty Contest 凸包:寻找每两点之间距离的最大值 这个最大值一定是在凸包的边缘上的! 求凸包的算法: Andrew算法! */ #include<iostr ...
- 【BZOJ 2300】 2300: [HAOI2011]防线修建 (动态凸包+set)
2300: [HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上 ...
- hdu 1348 Wall(凸包模板题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1348 Wall Time Limit: 2000/1000 MS (Java/Others) M ...
- HDU ACM 1392 Surround the Trees->凸包
分析:直接求出凸包.再算边长就可以. 另外仅仅有一个点时为0.00单独处理,两个点直接为距离也单独处理. #include<iostream> #include<cmath> ...
- poj 1228 凸包
题目链接:http://poj.org/problem?id=1228 #include<cstdio> #include<cstring> #include<cmath ...
- poj 3608 旋转卡壳求不相交凸包最近距离;
题目链接:http://poj.org/problem?id=3608 #include<cstdio> #include<cstring> #include<cmath ...
- UVa1453或La4728 凸包+枚举(或旋转卡壳)
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- poj 2187 凸包加旋转卡壳算法
题目链接:http://poj.org/problem?id=2187 旋转卡壳算法:http://www.cppblog.com/staryjy/archive/2009/11/19/101412. ...
随机推荐
- python学习笔记:接口开发——flask Demo实例
举例1,返回当前时间接口 ''' 初始化:所有的Flask都必须创建程序实例, web服务器使用wsgi协议,把客户端所有的请求都转发给这个程序实例 程序实例是Flask的对象,一般情况下用如下方法实 ...
- Mysq sql语句教程
mysql管理命令 show databases; 显示服务器上当前所有的数据库 use 数据库名称; 进入指定的数据库 show tables; 显示当前数据库中所有的数据表 d ...
- 升级python后yum命令出错
执行yum命令报错: yum list Loaded plugins: fastestmirror base | 3.6 kB 00:00:00 epel | 5.3 kB 00:00:00 extr ...
- 例行性工作排程 (crontab)
说白了,就是一些例行工作的日常执行的排序程序 Linux 工作排程的种类: at,cron 鸟叔说,atd并不是在所有版本都是开启的,但是centos7默认是开启的 [root@localhost ...
- Postfix+Dovecot+MySQL搭建邮件服务器
网上有很多使用Postfix搭建邮件服务器的文章,但目前貌似没有看到较为完整的一篇.本例将尝试在Ubuntu系统中使用Postfix+Dovecot+MySQL搭建邮件服务器. 说到邮件服务器,网上有 ...
- sqldeveloper全部导出
点击Tools--Export User Objects 这种方式可以导出当前用户拥有的所有对象,包括表.视图.触发器.同义词等等,对于表,只能导出表结构(建表语句),不能导出数据, 选中要导出的对象 ...
- 【JDK1.8】Java 栈实现方式
看到一道面试题,问Java中栈的实现方式,记录下一些实现细节. API中有5个方法,分别是: boolean empty() E peek() E pop() E push() int search( ...
- Java中IO流之字符流
我们有了字节流,为什么还需要字符流? 字符的底层是 字节 + 编码表 = 字符,字符是人能看懂的信息. 字符流在使用的时候,会以字节流为基础,把字节写入缓冲区,在缓冲区内根据编码类型(UTF-8,GB ...
- Shiro学习(12)与Spring集成
Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成. 在示 ...
- CentOS7简单安装mplayer和vlc!
http://pkgs.org/在这个网上搜索下面的包的最新版1. sudo rpm -ivh epel-release-7-0.2.noarch.rpm 2. sudo rpm -Uvh elrep ...