poj 2007(凸包)
| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 8005 | Accepted: 3798 |
Description
A closed polygon is called convex if the line segment joining any
two points of the polygon lies in the polygon. Figure 1 shows a closed
polygon which is convex and one which is not convex. (Informally, a
closed polygon is convex if its border doesn't have any "dents".)

The subject of this problem is a closed convex polygon in the
coordinate plane, one of whose vertices is the origin (x = 0, y = 0).
Figure 2 shows an example. Such a polygon will have two properties
significant for this problem.
The first property is that the vertices of the polygon will be
confined to three or fewer of the four quadrants of the coordinate
plane. In the example shown in Figure 2, none of the vertices are in the
second quadrant (where x < 0, y > 0).
To describe the second property, suppose you "take a trip" around
the polygon: start at (0, 0), visit all other vertices exactly once, and
arrive at (0, 0). As you visit each vertex (other than (0, 0)), draw
the diagonal that connects the current vertex with (0, 0), and calculate
the slope of this diagonal. Then, within each quadrant, the slopes of
these diagonals will form a decreasing or increasing sequence of
numbers, i.e., they will be sorted. Figure 3 illustrates this point.


Input
input lists the vertices of a closed convex polygon in the plane. The
number of lines in the input will be at least three but no more than 50.
Each line contains the x and y coordinates of one vertex. Each x and y
coordinate is an integer in the range -999..999. The vertex on the first
line of the input file will be the origin, i.e., x = 0 and y = 0.
Otherwise, the vertices may be in a scrambled order. Except for the
origin, no vertex will be on the x-axis or the y-axis. No three vertices
are colinear.
Output
output lists the vertices of the given polygon, one vertex per line.
Each vertex from the input appears exactly once in the output. The
origin (0,0) is the vertex on the first line of the output. The order of
vertices in the output will determine a trip taken along the polygon's
border, in the counterclockwise direction. The output format for each
vertex is (x,y) as shown below.
Sample Input
0 0
70 -50
60 30
-30 -50
80 20
50 -60
90 -20
-30 -40
-10 -60
90 10
Sample Output
(0,0)
(-30,-40)
(-30,-50)
(-10,-60)
(50,-60)
(70,-50)
(90,-20)
(90,10)
(80,20)
(60,30)
题目要从(0,0)开始,所以找到(0,0)之后再进行输出其之后的和之前的就行...凸包水
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
const int N = ;
const double pi = atan(1.0)*;
const double eps = 1e-;
struct Point
{
int x,y;
} p[N];
Point Stack[N];
int n;
int mult(Point a,Point b,Point c)
{
return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
}
int dis(Point a,Point b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
int cmp(Point a,Point b)
{
if(mult(a,b,p[])>) return ;
if(mult(a,b,p[])==&&dis(b,p[])-dis(a,p[])>eps) return ;
return ;
}
int Graham()
{
int top = ;
sort(p+,p+n,cmp);
Stack[] = p[];
Stack[] = p[];
Stack[] = p[];
for(int i=; i<n; i++)
{
while(top>=&&mult(p[i],Stack[top],Stack[top-])>=) top--;
Stack[++top]=p[i];
}
return top;
}
int main()
{
n = ;
while(scanf("%d%d",&p[n].x,&p[n].y)!=EOF)
{
n++;
//if(n==10) break;
}
//for(int i=0;i<n;i++) printf("%d %d\n",p[i].x,p[i].y);
int k=;
for(int i=; i<n; i++)
{
if(p[i].y<p[k].y||((p[i].y==p[k].y)&&(p[i].x<p[k].x))) k = i;
}
swap(p[],p[k]);
double sum=;
int top = Graham();
int temp = ;
for(int i=;i<=top;i++){
if(Stack[i].x==&&Stack[i].y==) temp = i;
}
for(int i=temp;i<=top;i++) printf("(%d,%d)\n",Stack[i].x,Stack[i].y);
for(int i=;i<temp;i++) printf("(%d,%d)\n",Stack[i].x,Stack[i].y);
}
poj 2007(凸包)的更多相关文章
- poj 2007 凸包构造和极角排序输出(模板题)
Scrambled Polygon Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10841 Accepted: 508 ...
- POJ 2007 Scrambled Polygon 极角序 水
LINK 题意:给出一个简单多边形,按极角序输出其坐标. 思路:水题.对任意两点求叉积正负判断相对位置,为0则按长度排序 /** @Date : 2017-07-13 16:46:17 * @File ...
- poj 1873 凸包+枚举
The Fortified Forest Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6198 Accepted: 1 ...
- poj 1113 凸包周长
Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 33888 Accepted: 11544 Descriptio ...
- Poj 2187 凸包模板求解
Poj 2187 凸包模板求解 传送门 由于整个点数是50000,而求凸包后的点也不会很多,因此直接套凸包之后两重循环即可求解 #include <queue> #include < ...
- POJ - 2007 极角排序(Java 实现)
POJ 2007 将所有的点按逆时针输出 import java.io.*; import java.util.*; public class Main { static class Point im ...
- Scrambled Polygon - POJ 2007(求凸包)
给一些点,这些点都是一个凸包上的顶点,以第一个点为起点顺时针把别的点拍排一下序列. 分析:最简单的极坐标排序了..................... 代码如下: ----------------- ...
- POJ 2007 Scrambled Polygon 凸包
Scrambled Polygon Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 7214 Accepted: 3445 ...
- POJ 2007 Scrambled Polygon [凸包 极角排序]
Scrambled Polygon Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8636 Accepted: 4105 ...
随机推荐
- multi-tap
multi-tap又称 multi-press . 是在手机,或者电视遥控上的keypad定义,有如下2类标准: 1. ITU-T E.161 2.T9 使用举例如下: Consider a typi ...
- DPDK 网卡RSS(receive side scaling)简介
网卡RSS(receive side scaling)简介 RSS是一种网卡驱动技术,能让多核系统中跨多个处理器的网络收包处理能力高效能分配.注意:由于同一个核的处理器超线程共享同一个执行引擎,这个效 ...
- Mac上利用Aria2加速百度网盘下载
百度网盘下载东西的速度那叫一个慢,特别是大文件,看着所需时间几个小时以上,让人很不舒服,本文记录自己在mac上利用工具Aria2加速的教程,windows下思路也是一样! 科普(可以不看) 这里顺带科 ...
- html前端插件 ZenCoding 更名为Emmet
eclipse下的使用方法 http://www.educity.cn/develop/651853.html visualstudio下的使用方式 http://www.johnpapa.net ...
- Java中IO——NIO
一.引入 当引入一些新功能的时候,那说明之前的设计可能还需要完善. 1.阻塞式 在传统的IO输入输出中,如果我们从流中去读数据,而数据源中没有数据时,程序就会阻塞该线程.阻塞式线程的一种基本状态,可以 ...
- 【bzoj1806】[Ioi2007]Miners 矿工配餐 dp
题目描述 有n个物品,每个都是3种之一.现要将这n个物品分成两个序列,对于每个序列中的每个物品,可以得到 它及它前面相邻的两个物品(不足则取全部)中不同种类的个数 的收益.问最大的总收益. 输入 输入 ...
- BZOJ4345 POI2016Korale(构造+堆+线段树)
注意到k与n同阶,考虑构造一种枚举子集的方式,使得尽量先枚举较小的子集.首先sort一下,用堆维护待选子集.每次取出最小子集,并加入:1.将子集中最大数ai替换为ai+1 2.直接向子集中添加ai+1 ...
- Android中代码设置RadioButton的高端技巧
不知道怎么起标题,就这样了. 目前主要讲两个方面内容: 代码方式 设置RadioButton的 android:button . android:background 等属性为 @null : 代码方 ...
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) B
B. Problems for Round time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- angular响应式编程
1.响应式编程 例子import {Observable} from "rxjs/Observable"; Observable.from([1,2,3,4]) .filter(( ...