题意:

给你n个点,第一个点一定是(0,0),最后一个点纵坐标yn一定是0,中间的点的横坐标一定都是在(0,xn)之间的

然后从第一个点开始飞行,每次飞到下一个点j,你花费的价值就是xi*yj-xj*yi,并且这里每一次飞行必须满足xi<xj

让你求出你所花费的最小的价值(可以为负)下,飞行的路径,如果有多种情况,输出路径字典序最小的那个

显然坐标相同的点里只保留编号最小的点最优。这里是因为题目严格要求xi<xj,所以不可能在原地飞行。

将起点到终点的路径补全为终点往下走到无穷远处,再往左走到起点正下方,再往上回到起点。任意路径中回到起点部分的代价相同,观察代价和的几何意义,就是走过部分的面积的相反数。代价和最小等价于面积最大,故一定是沿着上凸壳行走。

显然起点、终点、凸壳的拐点必须要作为降落点。对于共线的点a​1​​,a​2​​,...,a​m​​,若一个点ii的编号是[i,m]中最小的,那么在此处降落可以最小化字典序。

#include<bits/stdc++.h>
using namespace std;
const int mx = 2e5 + 10;
typedef long long ll;
int n,m,ans[mx],top,ma;
struct node
{int x,y;int pos;
}s[mx],tubeg[mx],w;
bool vis[mx];
ll judge(node p1,node p2,node p0)//面积公式判断正负值
{ll ans = 1ll*(p1.x-p0.x)*(p2.y-p0.y) - 1ll*(p2.x-p0.x)*(p1.y-p0.y);return ans;
}
bool cmp(node a,node b)
{ll c = judge(w,b,a);//极角排序,同角度按距离从小到大排 if(b.x==a.x&&b.y==a.y) return a.pos > b.pos;if(!c) return pow(a.x-w.x,2)+pow(a.y-w.y,2) < pow(b.x-w.x,2)+pow(b.y-w.y,2);return c > 0;
}
void Graham()
{tubeg[0] = s[0],tubeg[1] = s[1];top = 2;for(int i=2;i<n;i++){while(top>1&&judge(tubeg[top-2],s[i],tubeg[top-1])<=0){if(judge(tubeg[top-2],s[i],tubeg[top-1])<0||tubeg[top-1].pos>s[i].pos) top--;else break;}tubeg[top++] = s[i];}for(int i=0;i<top;i++) printf("%d%c",tubeg[i].pos+1,i==top-1?'\n':' ');
}
int main()
{int t;scanf("%d",&t);while(t--){scanf("%d",&n);memset(vis,0,sizeof(vis));for(int i=0;i<n;i++){scanf("%d%d",&s[i].x,&s[i].y);s[i].pos = i; }w = s[0];sort(s+1,s+n,cmp);Graham();}return 0;
} 

View Code

转载于:https://www.cnblogs.com/shuaihui520/p/10323080.html

HDU 6325 Problem G. Interstellar Travel(凸包)相关推荐

  1. 2018HDU多校训练-3-Problem G. Interstellar Travel

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6325                                  Interstellar Trav ...

  2. 2018 Multi-University Training Contest 3: G. Interstellar Travel(凸包)

    题意:给你平面上n个点,第一个点一定在(0, 0),第n个点的y坐标一定为0,除此之外中间所有点的x坐标一定大于0且小于最后一个点的x坐标,你从一号点开始出发,中间从第i个点到第j个点必须满足xj&g ...

  3. 【杭电多校round3】G Interstellar Travel

    题意 给定二维平面上的n个点,保证只有一个点(P_1)横坐标最小,一个点横坐标最大(P_n),在坐标轴上其余点无序且可能重合 即 y_1=y_n=0, 0=x_1<x_2,x_3,...,x_n ...

  4. Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem G. k-palindrome dp

    Problem G. k-palindrome 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c7022 ...

  5. HDU 6343.Problem L. Graph Theory Homework-数学 (2018 Multi-University Training Contest 4 1012)

    6343.Problem L. Graph Theory Homework 官方题解: 一篇写的很好的博客: HDU 6343 - Problem L. Graph Theory Homework - ...

  6. Problem G. Pandaria(线段树合并 + Kruskal 重构树)

    Problem G. Pandaria 给定一个有nnn条边的无向连通图,每条边有对应的边权,每个点有一个颜色, 问从一个点出发,经过不超过www的边权,所能到达的点中,颜色出现次数做多且颜色编号最小 ...

  7. Problem G: 函数---判断日期(年月日)是否合法

    Problem G: 函数---判断日期(年月日)是否合法 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 566  Solved: 240 Descr ...

  8. Problem G: C语言习题 医生值班

    Problem G: C语言习题 医生值班 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 847  Solved: 102 [Submit][Stat ...

  9. “玲珑杯”郑州轻工业学院第八届ACM程序设计大赛Problem G: 蛤玮点菜

    Problem G: 蛤玮点菜 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 320  Solved: 31 SubmitWeb Board Desc ...

最新文章

  1. 非常好用的网站状态监控服务:SiteUpTime,监控你的Http/Mail/Ping etc.
  2. fastjson异常问题
  3. 网络知识:秒懂你家的网络连接方式
  4. [html] HTML5的Server-Sent和WebSocket有什么区别?
  5. MemDC,GDI绘制注意点
  6. pythonの鉴黄之路(二)——图片转base64码
  7. CNN与Transformer结合,东南大学提出新架构 ConvTransformer
  8. php写else老是报错,调试PHP错误经常用到的一些
  9. 查看Linux版本命令
  10. python输出所有满足以下条件的3位整数_各位大佬帮帮忙吧 拜托了。求出所有符合下列条件的三位正整数:...
  11. 通过UltraISO,写入ISO镜像,制作U盘启动盘
  12. 小游戏学习--获取已发布微信小游戏源码 creator cocos 编译出微信平台代码 喵喵切水果 跑酷
  13. 机智云开源框架二次开发之换皮肤,几乎不用改代码
  14. 商家自研美团闪购开放平台SDK对接
  15. 超低功耗MCU 的网站
  16. word一键生成ppt 分页_PPT插入word自动分页
  17. [Algorithms] Gale-Shapley算法(婚姻匹配问题,高考录取机制)
  18. 计算机表格要学些什么,几个Excel表格的制作方法
  19. VUEPC和手机屏幕适配
  20. 如何处理java异常

热门文章

  1. 初识spring-boot
  2. Nodejs正则表达式函数之match、test、exec、search、split、replace使用详解
  3. Android商城开发系列(二)——App启动欢迎页面制作
  4. Oracle-查看oracle是否有表被锁
  5. 一位中国婆婆的自述[转]
  6. 基于easyui开发Web版Activiti流程定制器详解(三)——页面结构(上)
  7. MongoDB第二天
  8. 前嗅ForeSpider教程:创建模板
  9. 为什么Facebook的API以一个循环作为开头?
  10. Lottie 站在巨人的肩膀上实现 Android 酷炫动画效果