题意:有n个国家,输入国家的坐标让你构建国家的凸包,然后输入炮弹,当炮弹在这个国家里的话国家就被炸毁了求最后被炸毁的总面积。

wa的点!!!!有可能反复炸一个国家不能重复计算面积

#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <cstdio>using namespace std;const int maxn=200;
const double eps=1e-8;int sgn(double x)
{if(fabs(x)<eps)return 0;if(x<0)return -1;elsereturn 1;
}
struct Point
{double x,y;Point(){}Point(double _x,double _y){x=_x;y=_y;}Point operator -(const Point &b)const{return Point(x-b.x,y-b.y);}double operator ^(const Point &b)const{return x*b.y-y*b.x;}double operator *(const Point &b)const{return x*b.x+y*b.y;}
};struct Line
{Point s,e;Line(){}Line(Point _s,Point _e){s=_s;e=_e;}
};
int n;
Point p[maxn];
int Stack[maxn];
int top=0;double dist(Point a,Point b)
{return sqrt((a-b)*(a-b));
}
bool cmp(Point a,Point b)
{int ans=sgn((a-p[0])^(b-p[0]));if(ans==1)return true;else if(ans==0)return dist(a,p[0])<dist(b,p[0]);elsereturn false;
}
void graham()
{for(int i=0;i<n;i++){if(p[i].y<p[0].y||(p[i].y==p[0].y&&p[i].x<p[0].x))swap(p[i],p[0]);}sort(p+1,p+n,cmp);if(n==1){Stack[0]=0;top=1;}else if(n==2){Stack[0]=0;Stack[1]=1;top=2;}else{Stack[0]=0;Stack[1]=1;top=2;for(int i=2;i<n;i++){while(top>1&&((p[Stack[top-1]]-p[Stack[top-2]])^(p[i]-p[Stack[top-2]]))<=0)top--;Stack[top++]=i;}}
}vector <Point> ve[maxn];double CalcArea(vector <Point> &ve)
{double res=0;for(int i=0;i<ve.size();i++){res+=(ve[i]^ve[(i+1)%ve.size()])/2;}return fabs(res);
}bool OnSeg(Point p,Line l)
{return sgn((l.s-p)^(l.e-p))==0&&sgn((p.x-l.s.x)*(p.x-l.e.x))<=0&&sgn((p.y-l.s.y)*(p.y-l.e.y))<=0;
}int inConvexPoly(Point p1,vector <Point> &ve)
{for(int i=0;i<ve.size();i++){if(sgn((ve[i]-p1)^(ve[(i+1)%(ve.size())]-p1))<0)return -1;else if(OnSeg(p1,Line(ve[i],ve[(i+1)%(ve.size())])))return 0;}return 1;
}
int main()
{int cont=0;double ans=0;while(1){scanf("%d",&n);if(n==-1)break;for(int i=0;i<n;i++)scanf("%lf %lf",&p[i].x,&p[i].y);top=0;graham();for(int i=0;i<top;i++){ve[cont].push_back(p[Stack[i]]);}//ans+=CalcArea(ve[cont]);cont++;}//printf("%.2lf\n",ans);double x,y;int check[maxn]={0};while(scanf("%lf %lf",&x,&y)!=EOF){Point p1=Point(x,y);for(int i=0;i<cont;i++){if(inConvexPoly(p1,ve[i])>=0&&check[i]==0){check[i]=1;ans+=CalcArea(ve[i]);continue;}}}printf("%.2lf\n",ans);return 0;
}

SCUD Busters POJ - 1264(凸包)相关推荐

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

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

  2. uva 109 SCUD Busters

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

  3. UVa Problem 109 - SCUD Busters

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

  4. poj 1264 hdu 1616 SCUD Busters 凸包+面积计算

    http://poj.org/problem?id=1264 这题很看郁闷,看了很久才明白是什么意思.大致就是有数个国家,每个国家有数个房子,房子相互连接组成的最小周长的多边形为该国家领土,当输入-1 ...

  5. poj 1264 || UVA 109 SCUD Busters

    UVA这题过得蛮多人的,觉得应该是个水题吧. 一读题,也不麻烦,给你N个王国,求下凸包,再求面积.给你一些炮弹,问炮弹炸掉的面积.(一个炮弹炸的话,整个王国都被炸了). 直接求凸包后,求出各个王国的面 ...

  6. poj 1264 SCUD Busters

    题意:给出一个k个王国, 每个由Ni个点的确定的凸包确定.之后给出多个炮弹, 如果炮弹落在凸包里, 该王国被停电,王国没有重合面积.问被停电的面积. 分析:简单多边形面积, 点和凸包的关系. #inc ...

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

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

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

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

  9. POJ1264 SCUD Busters 凸包

    POJ1264 有m个国家(m<=20)对每个国家给定n个城镇 这个国家的围墙是保证围住n个城镇的周长最短的多边形 必然是凸包 进行若干次导弹发射 落到一个国家内则国家被破坏 最后回答总共有多少 ...

最新文章

  1. 【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )
  2. 解决nginx重启“var/run/nginx/nginx.pid no such file or directory问题
  3. Leetcode 134. 加油站 解题思路及C++实现
  4. java paint方法哪个周期调用_关于一段java程序的小问题,paint函数是什么时候执行的,没有调用啊...
  5. html代码常用软件,HTML代码实际应用讲解
  6. 笔记:less的三种使用方法
  7. php 异步post,php – 使用POST的异步cURL
  8. php标签嵌入规范,HTML标签嵌套的详细规则
  9. 优先队列c++ STL用法
  10. galera mysql cluster
  11. 自动驾驶_高精地图与车辆协同
  12. 点击文本或按钮实现复制
  13. 直线插补算法---matlab仿真程序
  14. 计算机信息管理调查报告模板,精选市场调查报告模板锦集九篇
  15. 完美解决Sudo doesn‘t work: “/etc/sudoers is owned by uid 1000, should be 0”
  16. 岩板铺地好吗_**岩板铺地「泉州泰亨石材供应」
  17. Spring—xml和注解
  18. WMS、WFS、WMTS、TMS
  19. 苹果app禁止手势退出
  20. c语言wscript.echo用法,2.4.3 用Wscript.Echo显示简单的文本信息

热门文章

  1. Wireshark网络抓包工具
  2. 关于分布式存储,这是你应该知道的(图文详解)(关于存储的一些好文转载--1)
  3. memcache缓存
  4. VSFTP 显示与系统时间不相符的解决方式
  5. MTI雷达原理的学习
  6. 移动开发测试工具——Bugtags的集成
  7. 小迪安全培训2023期笔记汇总-持续更新
  8. 本科大专年限算工龄吗
  9. 【BZOJ3512】DZY Loves Math IV
  10. MES解决方案赋能「汽车改装行业」