hdu6325 /// 上凸包
2024-09-08 12:28:53
题目大意:
给定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 ;
}
最新文章
- JavaWeb---总结(十六)JSP指令
- MIT 6.828 JOS学习笔记0. 写在前面的话
- CSS中margin和padding的区别
- CentOS 7 搭建 LNMP
- uboot 各种烧写命令
- PHP中的Libevent学习
- tomcat安全配置(二)
- Linux之sed命令详解
- Android 应用开发性能优化完全分析
- Ubuntu安装一:VM安装具体解释
- Yii框架常见问题汇总
- cocos2d-x 获取当前播放第几帧最高效的方法
- Dynamicaly Typed(动态定型), Objective-C Runtime Programming
- Ajax 异步上传文件
- 创建帧动画1 - xml方式
- NSScanner类的基本用法
- lua 语法的使用总结
- Windows jmeter配置
- 写给大忙人的Elasticsearch架构与概念(未完待续)
- javaee开发模式
热门文章
- js中继承的实现,原型链的知识点归纳,借用构造函数,组合继承(伪经典继承)
- go中的string操作
- JS对象 window对象 屏幕可用高和宽度 1. screen.availWidth 属性返回访问者屏幕的宽度,以像素计,减去界面特性,比如任务栏。 2. screen.availHeight 属
- 爱的传送带: print(.format())
- php自动生成不重复的id
- leetcode-160周赛-5241-铺瓷砖
- python判断文件的编码格式是否为UTF8 无BOM格式
- stl+数论——1247D
- 学 Win32 汇编[22] - 逻辑运算指令: AND、OR、XOR、NOT、TEST
- WebKit资源