博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LightOJ 1203 Guarding Bananas (Convex Hull)
阅读量:6239 次
发布时间:2019-06-22

本文共 2492 字,大约阅读时间需要 8 分钟。

  简单凸包。处理凸包的时候吧ch写成了pt,wa了两次。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 7 using namespace std; 8 9 struct Point {10 double x, y;11 Point() {}12 Point(double x, double y) : x(x), y(y) {}13 } ;14 15 bool operator < (Point x, Point y) { return x.x < y.x || (x.x == y.x && x.y < y.y);}16 bool operator == (Point x, Point y) { return x.x == y.x && x.y == y.y;}17 Point operator - (Point x, Point y) { return Point(x.x - y.x, x.y - y.y);}18 19 const double EPS = 1e-8;20 inline int sgn(double x) { return fabs(x) < EPS ? 0 : (x < 0 ? -1 : 1);}21 inline double crossDet(Point x, Point y) { return x.x * y.y - x.y * y.x;}22 inline double crossDet(Point o, Point a, Point b) { return crossDet(a - o, b - o);}23 24 int andrew(Point *pt, int n, Point *ch) {25 sort(pt, pt + n);26 n = (int) (unique(pt, pt + n) - pt);27 int m = 0;28 for (int i = 0; i < n; i++) {29 while (m > 1 && sgn(crossDet(ch[m - 2], ch[m - 1], pt[i])) <= 0) m--;30 ch[m++] = pt[i];31 }32 int k = m;33 for (int i = n - 2; i >= 0; i--) {34 while (m > k && sgn(crossDet(ch[m - 2], ch[m - 1], pt[i])) <= 0) m--;35 ch[m++] = pt[i];36 }37 if (n > 1) m--;38 return m;39 }40 41 const int N = 111111;42 Point pt[N], ch[N];43 const double PI = acos(-1.0);44 45 inline double angle(Point x) { return atan2(x.y, x.x);}46 47 int main() {48 // freopen("in", "r", stdin);49 int T, n;50 cin >> T;51 for (int cas = 1; cas <= T; cas++) {52 cin >> n;53 for (int i = 0; i < n; i++) {54 scanf("%lf%lf", &pt[i].x, &pt[i].y);55 }56 if (n <= 2) {57 printf("Case %d: 0.00000000\n", cas);58 continue;59 }60 n = andrew(pt, n, ch);61 for (int i = 0; i < 10; i++) {62 ch[i + n] = ch[i];63 }64 double mini = 1e10;65 for (int i = 0; i < n; i++) {66 double ang1 = angle(ch[i] - ch[i + 1]);67 double ang2 = angle(ch[i + 2] - ch[i + 1]);68 double da = fabs(ang1 - ang2);69 if (da > PI) da = 2.0 * PI - da;70 mini = min(mini, da * 180.0 / PI);71 }72 printf("Case %d: %.8f\n", cas, mini);73 }74 return 0;75 }
View Code

 

——written by Lyon

转载于:https://www.cnblogs.com/LyonLys/archive/2013/05/29/LOJ_1203_Lyon.html

你可能感兴趣的文章
oracle 启动关闭周期
查看>>
【经典数据结构】B树与B+树
查看>>
c++学习 定位new表达式
查看>>
svn问题
查看>>
Fiddler是位于客户端和服务器端的HTTP代理(目前最常用的http抓包工具之一)
查看>>
spring为何要注入接口,而注入接口的实现类就会报错
查看>>
<转>mysql 树查询语句
查看>>
cursor 与refcursor及sys_refcursor的区别
查看>>
SEO基础知识8大精华文章之第一篇(连载)
查看>>
nginx的root 指令
查看>>
我的友情链接
查看>>
查看Windows上开启的服务
查看>>
linux 常用命令
查看>>
Java 加解密技术系列之 DH
查看>>
VirtualBox三种联网方式
查看>>
Python中使用pickle持久化(保存)对象
查看>>
python3 pelican 搭建静态博客
查看>>
Android 自定义组合控件小结
查看>>
Android学习进阶路线导航线路(Android源码分享)
查看>>
解决Maven和Mybatis整合时打包漏掉mapper的xml文件及其它资源
查看>>