hdu 3952 计算几何
来源:互联网 发布:java小程序代码 编辑:程序博客网 时间:2024/05/16 23:35
http://acm.hdu.edu.cn/showproblem.php?pid=3952
这道题目是Alibaba程序设计公开赛的一道题目,以前没怎么做过计算几何的题目,也没有整理过模板,所以那天比赛的时候我就悲剧了~
今天想到了,所以整理一下,也顺便把直线与线段相交的模板整理出来。
题意很好理解,就是给你一些互不相交的多边形,让你用一条直线去穿这些多边形,问最多能穿过多少,而且如果这条直线只穿过多边形的一个顶点,也认为是穿过了这个多边
形。
数据量不是很大,枚举完全可以过掉,思路就是选择任意的两个多边形上面的任意两个顶点,然后判断这两个顶点最多能通过多少个多边形,然后取最大值就可以了。
代码如下:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int k;
int x[12],y[12];
}point[12];
//利用叉乘判断两直线是否相交,如果相交返回true,否则返回false
bool judge(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)
{
int a,b,c,d,e,f;
a=x3-x1,b=y3-y1;
c=x2-x1,d=y2-y1;
e=x4-x1,f=y4-y1;
if((a*d-b*c)*(c*f-d*e)>=0) return true;
return false;
}
int main()
{
int t,n;
scanf("%d",&t);
for(int Case=1;Case<=t;Case++)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&point[i].k);
for(int j=0;j<point[i].k;j++)
scanf("%d%d",&point[i].x[j],&point[i].y[j]);
}
if(n==1)
{
printf("Case %d: 1\n",Case);continue;
}
int ans;
int max=0;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
for(int k=0;k<point[i].k;k++)
{
for(int p=0;p<point[j].k;p++)
{
ans=2;
for(int q=0;q<n;q++)
{
if(q==i||q==j) continue;
for(int s=0;s<point[q].k-1;s++)
{
if(judge(point[i].x[k],point[i].y[k],point[j].x[p],point[j].y[p],point[q].x[s],point[q].y[s],point[q].x[s+1],point[q].y[s+1]))
{
ans++;
break;
}
}
}
if(max<ans) max=ans;
}
}
}
}
printf("Case %d: %d\n",Case,max);
}
return 0;
}
- hdu 3952 计算几何
- HDU 3952(计算几何)
- hdu 3952 计算几何 暴力
- HDU 3694计算几何
- hdu 4195#计算几何
- hdu 4353 计算几何
- hdu 3681 计算几何
- hdu 3629 计算几何
- hdu 3629 计算几何
- hdu 5476 (计算几何)
- hdu 2826 计算几何
- hdu 1007(计算几何)
- hdu 1086 计算几何
- hdu 6158 计算几何
- HDU 4033 二分+计算几何
- hdu-2438 计算几何+三分
- HDU 1115 计算几何MB
- hdu 2876 (计算几何)
- Sql Server内存瓶颈(读书笔记)
- js处理年月日下拉菜单变化
- Java学习笔记四
- IBOutlet和IBAction到底是什么?
- 程序员职业发展的绊脚石-思想的枷锁
- hdu 3952 计算几何
- zoj 1091 Knight Moves (BFS)(情况用循环控制,值得学习啊)
- jquery-复选框的全选与反选及数组的定义
- 关于tinyxml的剖析及遍历
- java的对象复制 --整理总结版
- 单调队列
- 委托和事件
- /etc/profile与/etc /enviroment的比较 UBUNTU四种环境变量的简介
- 准则2: 要知道信号处理函数中可以做那些处理