题目链接:nyoj 78  单调链凸包小结

题目讲解:本题考查的主要是凸包的用法,算是入门级的吧,当然前提是你接触过,平面几何:

AC代码:

 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
struct T
{
int x,y;
friend int operator < (T a, T b)
{
if((a.x<b.x) || (a.x==b.x && a.y<b.y))
return ;
return ;
}
}a[],ans[];
//用来判断第三点在当前两点构成的直线的左侧还是右侧,右侧返回值小于0;
double judge(T a, T b,T c)
{
return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
}
int main()
{
int T,m;
scanf("%d",&T);
while(T--)
{ scanf("%d",&m);
for(int i=; i<m; i++)
{
scanf("%d %d",&a[i].x,&a[i].y);
}
sort(a,a+m);
int k1=;
for(int i=; i<m; i++)//下凸包,从下面扫描个点;
{
while(k1> && judge(ans[k1-],ans[k1-],a[i])<=)
{
k1--;
}
ans[k1++]=a[i];
}
int k2=k1;
for(int i=m-; i>=; i--)//上凸包,从上面扫描各点;
{
while(k1>k2 && judge(ans[k1-],ans[k1-],a[i])<=)
{
k1--;
}
ans[k1++]=a[i];
}
k1--;
sort(ans,ans+k1);
for(int i=; i<k1; i++)
printf("%d %d\n",ans[i].x,ans[i].y);
}
return ;
}

最新文章

  1. Java动态代理与Cglib库
  2. poj2318
  3. Storm(4) - Distributed Remote Procedure Calls
  4. css改变谷歌浏览器的滚动条样式
  5. 使用node的http模块实现爬虫功能,并把爬到的数据存入mongondb
  6. 【Android - MD】之TabLayout的使用
  7. css3动画之animate
  8. 关于戴尔没有活动分区,遇到了“Windows安装程序无法将windows配置为在此计算机的硬件上运行”提示等
  9. javascript中对象字面量与数组字面量
  10. linux下分割文件
  11. html的标签
  12. 对维数组排序 array_multisort()的应用
  13. Notepad++插件下载和介绍
  14. js获取http请求响应头信息
  15. flask框架----设置配置文件的几种方式
  16. 应用Python处理空间关系数据
  17. Python学习---IO的异步[asyncio模块(no-http)]
  18. iOS 一些常见问题
  19. Windows Embedded Compact 7初体验
  20. PhoneGap API 之事件处理

热门文章

  1. 关于mysql字段名和保留字冲突的问题
  2. HDU5312 Sequence
  3. Redis中为什么使用跳表---------转自http://blog.csdn.net/u010412301/article/details/64923131
  4. 跟着辛星一起用CSS美化商品列表
  5. Apache高级配置
  6. JavaScript,JS如何控制input输入字符限制
  7. 微博轻量级RPC框架Motan正式开源:支撑千亿调用
  8. rapidxml的常见读写操作
  9. Unity3d_ADBannerView
  10. SVN 常见命令