题目大意:

给定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 ;
}

最新文章

  1. JavaWeb---总结(十六)JSP指令
  2. MIT 6.828 JOS学习笔记0. 写在前面的话
  3. CSS中margin和padding的区别
  4. CentOS 7 搭建 LNMP
  5. uboot 各种烧写命令
  6. PHP中的Libevent学习
  7. tomcat安全配置(二)
  8. Linux之sed命令详解
  9. Android 应用开发性能优化完全分析
  10. Ubuntu安装一:VM安装具体解释
  11. Yii框架常见问题汇总
  12. cocos2d-x 获取当前播放第几帧最高效的方法
  13. Dynamicaly Typed(动态定型), Objective-C Runtime Programming
  14. Ajax 异步上传文件
  15. 创建帧动画1 - xml方式
  16. NSScanner类的基本用法
  17. lua 语法的使用总结
  18. Windows jmeter配置
  19. 写给大忙人的Elasticsearch架构与概念(未完待续)
  20. javaee开发模式

热门文章

  1. js中继承的实现,原型链的知识点归纳,借用构造函数,组合继承(伪经典继承)
  2. go中的string操作
  3. JS对象 window对象 屏幕可用高和宽度 1. screen.availWidth 属性返回访问者屏幕的宽度,以像素计,减去界面特性,比如任务栏。 2. screen.availHeight 属
  4. 爱的传送带: print(.format())
  5. php自动生成不重复的id
  6. leetcode-160周赛-5241-铺瓷砖
  7. python判断文件的编码格式是否为UTF8 无BOM格式
  8. stl+数论——1247D
  9. 学 Win32 汇编[22] - 逻辑运算指令: AND、OR、XOR、NOT、TEST
  10. WebKit资源