http://poj.org/problem?id=1474

题目大意:给按照顺时针序的多边形顶点,问其是否有内核。

——————————————————————————————

(和上道题目一模一样,所以我把题解都照着搬过来了)

(绝对不是我偷懒……)

看了两个小时的资料,对板子敲了一个小时,终于将简单的板子题弄过了。

(原本计划去搞风水那道题,但发现我等级的太低了……需要从基础练起半平面交)

代码参考:http://blog.csdn.net/accry/article/details/6070621

理解参考:http://blog.csdn.net/acm_zl/article/details/11153475

(这个理解参考找了很久……我只看得懂这个,先看下面的再看上面的能对理解起到蛮好的帮助)

#include<cstdio>
#include<queue>
#include<cctype>
#include<cstring>
#include<stack>
#include<cmath>
#include<algorithm>
using namespace std;
typedef double dl;
const dl eps=1e-;
const int N=;
struct Point{
dl x;
dl y;
}p[N],point[N],q[N],z;
//point,初始点
//q,暂时存可行点
//p,记录可行点
int n,curcnt,cnt;
//curcnt,暂时存可行点个数
//cnt,记录可行点个数
inline Point getmag(Point a,Point b){
Point s;
s.x=b.x-a.x;s.y=b.y-a.y;
return s;
}
inline dl multiX(Point a,Point b){
return a.x*b.y-b.x*a.y;
}
inline void getline(Point x,Point y,dl &a,dl &b,dl &c){
a=y.y-x.y;
b=x.x-y.x;
c=y.x*x.y-x.x*y.y;
return;
}
inline Point intersect(Point x,Point y,dl a,dl b,dl c){
Point s;
dl u=fabs(a*x.x+b*x.y+c);
dl v=fabs(a*y.x+b*y.y+c);
s.x=(x.x*v+y.x*u)/(u+v);
s.y=(x.y*v+y.y*u)/(u+v);
return s;
}
inline void cut(dl a,dl b,dl c){
curcnt=;
for(int i=;i<=cnt;i++){
if(a*p[i].x+b*p[i].y+c>-eps)q[++curcnt]=p[i];
else{
if(a*p[i-].x+b*p[i-].y+c>eps){
q[++curcnt]=intersect(p[i],p[i-],a,b,c);
}
if(a*p[i+].x+b*p[i+].y+c>eps){
q[++curcnt]=intersect(p[i],p[i+],a,b,c);
}
}
}
for(int i=;i<=curcnt;i++)p[i]=q[i];
p[curcnt+]=p[];p[]=p[curcnt];
cnt=curcnt;
return;
}
inline void init(){
for(int i=;i<=n;i++)p[i]=point[i];
z.x=z.y=;
p[n+]=p[];
p[]=p[n];
point[n+]=point[];
cnt=n;
return;
}
inline void regular(){//调换方向
for(int i=;i<(n+)/;i++)swap(point[i],point[n-i]);
return;
}
inline bool solve(){
//注意:默认点是顺时针,如果题目不是顺时针,规整化方向
init();
for(int i=;i<=n;i++){
dl a,b,c;
getline(point[i],point[i+],a,b,c);
cut(a,b,c);
}
return cnt;
}
int main(){
int cntt=;
while(scanf("%d",&n)!=EOF&&n){
for(int i=;i<=n;i++){
scanf("%lf%lf",&point[i].x,&point[i].y);
}
printf("Floor #%d\n",++cntt);
if(!solve())puts("Surveillance is impossible.");
else puts("Surveillance is possible.");
putchar('\n');
}
return ;
}

最新文章

  1. DownloadManager
  2. 超链接a的target属性
  3. java基础:所有参数皆是按值参数
  4. SQL优化 1
  5. dedecms文章标题是在哪个数据库表?要批量替换关键词
  6. IDF实验室-简单编程-特殊的日子 writeup
  7. JS apply()的使用详解
  8. Jenkins: 配置信息变更历史
  9. 每天学点mysql
  10. JAVA入门——Generic/泛型
  11. 计算机基础-C语言-16章-数组应用-计算字符串长度
  12. django2.0再写一行代码
  13. django--orm关系字段(ForeignKey、OneToOneField、ManyToManyField)详解
  14. Python3基础知识之数据结构List和Tuple
  15. IDA Pro Disassembler 6.8.15.413 (Windows, Linux, Mac)
  16. eclipse打开失败
  17. IsPostback小结
  18. 第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍
  19. caffe Python API 之图片预处理
  20. 复现VGG19训练自定义图像分类

热门文章

  1. 基于Spring的最简单的定时任务实现与配置(二)
  2. Linux命令应用大词典-第2章 获取帮助
  3. Spring Boot 示例项目
  4. java实现网页截图
  5. 【springmvc+mybatis项目实战】杰信商贸-3.需求分析与数据库建模
  6. Case 降序升序排列
  7. Python3 Tkinter-Text
  8. 衡量失业:失业率(Unemployment Rate)
  9. 20172332 实验一《Java开发环境的熟悉》实验报告
  10. MyBatis传入参数为list、数组、map写法(转载)