题目:给出n个凸包,现在要用炸弹炸毁固定的坐标,被攻击的坐标所在的凸包会被毁灭,现在问你被毁灭的凸包的面积分析:求凸包+求多边形面积
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>using namespace std;const int X = 105;
#define debug puts("here");int top,n,a[X];
bool use[X];struct node
{int x,y;friend bool operator < (node a,node b){return a.y<b.y||(a.y==b.y&&a.x<b.x);}
}res[X],p[X],in[25][X];int det(int x1,int y1,int x2,int y2)
{return x1*y2-x2*y1;
}bool del(int top,int i)
{if(det(res[top].x-res[top-1].x,res[top].y-res[top-1].y,p[i].x-res[top].x,p[i].y-res[top].y)<=0)return true;return false;
}void graham()
{sort(p,p+n);top = 1;res[0] = p[0];res[1] = p[1];for(int i=2;i<n;i++){while(top&&del(top,i))top--;res[++top] = p[i];}int mint = top;res[++top] = p[n-2];for(int i=n-3;i>=0;i--){while(top!=mint&&del(top,i))--top;res[++top] = p[i];}
}int det(node a,node b,node o)
{return (a.x-o.x)*(b.y-o.y)-(a.y-o.y)*(b.x-o.x);
}bool check(node cur,int id)
{for(int i=0;i<a[id]-1;i++)if(det(in[id][i],in[id][i+1],cur)*det(in[id][i+1],in[id][i+2],cur)<0)return false;return true;
}double dis(node a,node b)
{return sqrt((a.x-b.x)*1.0*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}double cal(int id)
{double ans = 0;for(int i=1;i<a[id];i++)ans += det(in[id][i],in[id][i+1],in[id][0]);ans /= 2;ans = max(ans,-ans);return ans;
}double solve(int x,int y,int cnt)
{node cur;cur.x = x;cur.y = y;for(int i=1;i<=cnt;i++)if(!use[i]&&check(cur,i)){use[i] = true;return cal(i);}return 0;
}int main()
{memset(use,false,sizeof(use));int cnt = 0;while(cin>>n,n!=-1){for(int i=0;i<n;i++)scanf("%d%d",&p[i].x,&p[i].y);graham();cnt++;for(int i=0;i<=top;i++)in[cnt][i] = res[i];a[cnt] = top;}int x,y;double ans = 0;while(cin>>x>>y)ans += solve(x,y,cnt);printf("%.2lf\n",ans);return 0;
}

  

转载于:https://www.cnblogs.com/yejinru/archive/2013/04/14/3020796.html

HOJ 1157 SCUD Busters相关推荐

  1. uva 109 SCUD Busters

    题意:有很多国家,国家的边界是包括房子和发电站的凸包,当发动战争是,会用飞毛腿导弹摧毁对方的发电站,则这个国家就会灭亡,给出每个国家的点的集合,包括房子和发电站,给出炮弹可以打中的点,计算出被摧毁的国 ...

  2. UVa 109 - SCUD Busters(凸包计算)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  3. UVa Problem 109 - SCUD Busters

    // UVa Problem 109 - SCUD Busters // Verdict: Accepted // Submission Date: 2011-11-24 // UVa Run Tim ...

  4. uva 109 SCUD Busters

    原题: 109 SCUD Bust ers Background Some problems are difficult to solve but h e a simplification that ...

  5. UVA 109 SCUD Busters【凸包模拟题】

    题目大意:世界由几个互不重叠领土但彼此敌对的国家组成,每个国家有一个发电站,负责给本国发电. 1,给出每个国家的建筑数(包括发电站和房子数),每个国家用最少的围墙将本国保护起来(凸包): 2,现在有不 ...

  6. SCUD Busters POJ - 1264(凸包)

    题意:有n个国家,输入国家的坐标让你构建国家的凸包,然后输入炮弹,当炮弹在这个国家里的话国家就被炸毁了求最后被炸毁的总面积. wa的点!!!!有可能反复炸一个国家不能重复计算面积 #include & ...

  7. UVA 109 || SCUD Busters(凸包面积计算

    = = 模板水题.看数据就可以做了. 输出被炸弹轰炸之后,所有王国停电的总面积,保留小数点后两位. 题目中说到每个王国的边界是围城这些点的最小周长,所以可以推出,每个王国都是一个凸包圈住的点集: 第一 ...

  8. UVa 109 - SCUD Busters

    题目:红警0 0?有一些国家,给出国家被围墙围了起来,围墙内的范围都属于这个国家,现在要发射一些导弹,如果导弹落到国家内,那对应的国家就会停电,现在问停电的总面积. 分析:计算几何.凸包.点与多边形关 ...

  9. 题解 UVA109 【SCUD Busters】

    传送门 题目大意: 给你一堆城市,每个城市由一堆点构成,城市的围墙是包含这个城市所有点的最小多边形,城市之间两两不相交.然后有给出一堆导弹的坐标,若一个导弹打在某个城市内部即可摧毁这个城市,问导弹摧毁 ...

最新文章

  1. UNXIN 文件和目录
  2. Java 实现日期 Date 的赋值
  3. .Net环境下基于Ajax的MVC方案
  4. 统计学习方法笔记(李航)———第六章(逻辑斯谛回归)
  5. System verilog随机系统函数$urandom使用方法
  6. 手把手教你搭建 vue 环境
  7. vc 编译器的一些精典报错
  8. 关于nginx rtmp的一点配置
  9. socketserver模块使用方法
  10. mysql主从复制不同步案例_mysql主从复制不同步的问题
  11. PHP UTF-8转GBK
  12. 用luac给lua脚本加密
  13. java运行无法加载主类_java运行显示“找不到或无法加载主类”的解决办法(linux)...
  14. 假装自己升级了Win11~
  15. 小米5查看设备号信息及验证type-c数据线
  16. RedHatEnterpriseLinux [RHEL]7.0——操作系统下载地址
  17. pip更新方法(失败了一般用换一种方法就解决了)
  18. 单位及主管部门同意报考证明单位不同意怎么办
  19. 编程表达年月日分秒c语言,年月日时分秒教学反思
  20. OpenGLES---设置获取Shader程序属性

热门文章

  1. js 金额转为大写
  2. python列表套着列表_python 列表套列表去重
  3. python抽取指定url页面的title_Python使用scrapy爬虫,爬取今日头条首页推荐新闻
  4. java扑克牌移动_蓝桥杯-扑克牌移动-java
  5. java直接引用_Java虚拟机 - 符号引用和直接引用理解
  6. 语言程序设计 郭有强_「概念篇8」程序语言如何被计算机理解?靠猜?那就搞笑了...
  7. matlab将图片旋转的代码_【MATLAB】钟表
  8. 爱普生690k打印针测试软件_办公室打印机什么牌子好 办公室打印机怎么选购【详解】...
  9. iphone7无服务_iphone7无服务无信号怎么办
  10. java中两短行代码合并一行_帮忙啊!!!!找出两个Java文件相似程度超过某一%的代码行。...