[POJ 3788] Interior Points of Lattice Polygons
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 229 | Accepted: 152 |
Description
The lattice points on the boundary of the polygon are boundary points (open dots in the figure above) and the points inside and not on the polygon are interior points (filled in dots in the figure above).
A polygon is convex if any line segment between two points of the polygon is inside (or on the boundary of) the polygon. Equivalently, the interior angle at each polygon vertex is less than 180 degrees. Note that any line between two points inside (and not on the boundary of) the polygon is entirely inside (and not on the boundary of) the polygon.
The interior points of a convex lattice polygon on any horizontal line form a single segment from a leftmost point to a rightmost point (which may be the same). Note that there may be no interior points (A), or only one (B), or isolated points (C) as shown in the figures below.
Write a program that reads the vertices of a convex lattice polygon in standard order and outputs the interior points as a list of horizontal line segments. The vertices of a lattice polygon are in standard order if:
a) The first vertex is the one with the largest y value. If two vertices have the same y value, the one with the smaller x value is the first.
b) Vertices are given in clockwise order around the polygon.
Input
Output
Sample Input
- 6
- 1 8
- 5 10
- 8 9
- 11 6
- 10 2
- 6 0
- 1 1
- 0 4
- 2 8
- 2 4
- 3 10
- 13 7
- 10 -3
- 0 0
- 3 3
- 1 3
- 3 1
- 1 1
- 4 3
- 1 4
- 4 1
- 1 1
- 5 4
- 0 6
- 2 3
- 3 0
- 1 3
- 6 6
- 1 3
- 3 3
- 4 2
- 3 1
- 1 1
- 0 2
Sample Output
- 1 9
- 9 4 7
- 8 3 8
- 7 2 9
- 6 2 10
- 5 1 10
- 4 1 10
- 3 1 10
- 2 1 9
- 1 2 7
- 2 12
- 9 3 6
- 8 3 9
- 7 3 12
- 6 2 12
- 5 2 12
- 4 2 12
- 3 1 11
- 2 1 11
- 1 1 11
- 0 1 10
- -1 4 10
- -2 7 10
- 3 0
- 4 1
- 2 2 2
- 5 2
- 4 1 1
- 2 2 2
- 6 1
- 2 1 3
题意:给出一个凸多边形,求在其内部的格点
- #include <iostream>
- #include <algorithm>
- #include <cstdio>
- #include <cmath>
- #include <vector>
- #include <cstring>
- using namespace std;
- #define INF 0x3f3f3f3f
- #define PI acos(-1.0)
- #define EPS 1e-10
- #define N 1010
- int dcmp(double x)
- {
- if(fabs(x)<EPS) return ;
- return x<?-:;
- }
- struct Point
- {
- double x,y;
- Point (){}
- Point (double x,double y):x(x),y(y){}
- Point operator - (Point p){
- return Point(x-p.x,y-p.y);
- }
- double operator * (Point p){
- return x*p.x+y*p.y;
- }
- double operator ^ (Point p){
- return x*p.y-y*p.x;
- }
- bool operator < (const Point &p)const
- {
- if(y!=p.y) return y>p.y;
- return x<p.x;
- }
- };
- struct Line
- {
- Point s,e;
- Line (){}
- Line (Point s,Point e):s(s),e(e){}
- };
- bool PointOnSeg(Line l,Point p)
- {
- return dcmp((l.s-p)^(l.e-p))== && dcmp((l.s-p)*(l.e-p))<=;
- }
- int PointInConvexPoly(Point p[],Point q,int n)
- {
- for(int i=;i<n;i++){
- if(dcmp((p[i]-q)^(p[(i+)%n]-q))>) return -;
- if(PointOnSeg(Line(p[i],p[(i+)%n]),q)) return ;
- }
- return ;
- }
- int main()
- {
- int n;
- int T,iCase;
- Point p[];
- scanf("%d",&T);
- while(T--)
- {
- scanf("%d%d",&iCase,&n);
- double mxx,mix,mxy,miy;
- mix=miy=INF;
- mxx=mxy=-INF;
- for(int i=;i<n;i++){
- scanf("%lf%lf",&p[i].x,&p[i].y);
- mix=min(mix,p[i].x);
- mxx=max(mxx,p[i].x);
- miy=min(miy,p[i].y);
- mxy=max(mxy,p[i].y);
- }
- int k=;
- Point q[];
- for(int i=mix;i<=mxx;i++){
- for(int j=miy;j<=mxy;j++){
- if(PointInConvexPoly(p,Point(i,j),n)==){
- q[k++]=Point(i,j);
- }
- }
- }
- if(k==){
- printf("%d 0\n",iCase);
- continue;
- }
- sort(q,q+k);
- int i,j,cnt=;
- for(i=;i<k;i++) if(q[i].y!=q[i-].y) cnt++;
- printf("%d %d\n",iCase,cnt);
- for(i=;i<k;i++){
- printf("%g %g",q[i].y,q[i].x);
- for(j=i+;j<k;j++){
- if(q[j].y!=q[i].y) break;
- }
- printf(" %g",q[j-].x);
- printf("\n");
- i=j-;
- }
- }
- return ;
- }
[POJ 3788] Interior Points of Lattice Polygons的更多相关文章
- POJ 3805 Separate Points (判断凸包相交)
题目链接:POJ 3805 Problem Description Numbers of black and white points are placed on a plane. Let's ima ...
- POJ 2464 Brownie Points II (树状数组,难题)
题意:在平面直角坐标系中给你N个点,stan和ollie玩一个游戏,首先stan在竖直方向上画一条直线,该直线必须要过其中的某个点,然后ollie在水平方向上画一条直线,该直线的要求是要经过一个sta ...
- POJ - 2464 Brownie Points II 【树状数组 + 离散化】【好题】
题目链接 http://poj.org/problem?id=2464 题意 在一个二维坐标系上 给出一些点 Stan 先画一条过一点的水平线 Odd 再画一条 过Stan那条水平线上的任一点的垂直线 ...
- POJ 2403 Hay Points
Hay Points Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5735 Accepted: 3695 Descri ...
- hdu 1156 && poj 2464 Brownie Points II (BIT)
2464 -- Brownie Points II Problem - 1156 hdu分类线段树的题.题意是,给出一堆点的位置,stan和ollie玩游戏,stan通过其中一个点画垂线,ollie通 ...
- 【POJ 1389】Area of Simple Polygons(线段树+扫描线,矩形并面积)
离散化后,[1,10]=[1,3]+[6,10]就丢了[4,5]这一段了. 因为更新[3,6]时,它只更新到[3,3],[6,6]. 要么在相差大于1的两点间加入一个值,要么就让左右端点为l,r的线段 ...
- POJ 2464 Brownie Points II(树状数组)
一开始还以为对于每根竖线,只要与过了任意一点的横线相交都可以呢,这样枚举两条线就要O(n^2),结果发现自己想多了... 其实是每个点画根竖线和横线就好,对于相同竖线统计(一直不包含线上点)右上左下总 ...
- POJ 2464 Brownie Points II --树状数组
题意: 有点迷.有一些点,Stan先选择某个点,经过这个点画一条竖线,Ollie选择一个经过这条直接的点画一条横线.Stan选这两条直线分成的左下和右上部分的点,Ollie选左上和右下部分的点.Sta ...
- Poj 2403 Hay Points(Map)
一.题目大意 实现一个工资计算系统.工资的计算规则是:首先,给定一些关键字和对应的价值,这个相对于字典.然后给出的是求职者的描述,如果这个描述中包含关键字则加上对应的价值,总得价值就是这个求职者的工资 ...
随机推荐
- Demo学习: ClientInfo
ClientInfo 获取客户端环境参数,从0.9版本开始新增了TUniClientInfoRec对象,可以得到客户端的一些信息,之前为了获取浏览器版本号需要自己写函数,现在可以直接使用TUniCli ...
- 一个基于python的即时通信程序
5月17日更新: 广播信息.用户列表.信息确认列表以及通信信息,从原来的用字符串存储改为使用字典来存储,使代码更清晰,更容易扩展,具体更改的格式如下: 广播信息(上线): { 'status': 信息 ...
- 1062 Talent and Virtue (25)
/* L (>=60), the lower bound of the qualified grades -- that is, only the ones whose grades of ta ...
- js 操作cookie
jquery.cookie中的操作: jquery.cookie.js是一个基于jquery的插件,点击下载! 创建一个会话cookie: $.cookie(‘cookieName’,'cookieV ...
- Linux远程备份—ftp方式、NFS方式
问题:现在项目中每天都有从其它各个系统发过来的数据文件(存放在/var/data目录下,以.txt结尾),虽然很久以前的文件很少用到,占用了很多空间,却不能删除.于是,想把一个月以前的文件都压缩了传到 ...
- 快捷设置IE代理小工具
时间:2015-02-06 起因: 公司新装了PLM系统,用这个系统必须使用指定IP段的IP才能访问.所以为了还能愉快的继续使用代理进行特定网站的访问,我们必须要频繁的去设置IE代理,这也太麻烦了吧. ...
- 判断js中的数据类型
如何判断js中的数据类型:typeof.instanceof. constructor. prototype方法比较 如何判断js中的类型呢,先举几个例子: var a = "iamstri ...
- C# DateTime和DateTime?格式化时间
DateTime: <%= Model.CreateTime.ToString("yyyy年MM月dd日 H时m分s秒")%> DateTime?: <%= ...
- SQL的表连接
每天给自己扫盲,让自己变得越博学. 继续学习<程序员的SQL金典>,这回我们来看看表连接相关的内容.表连接的相关知识在实际的项目开发当中,使用非常广. 所谓表连接,就是通过关联多张表,从而 ...
- 手机开发类型jquery的框架Zepto(API)
Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery有着类似的api. 如果你会用jquery,那么你也会用zepto. http://www.html-5.cn/M ...