题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1010

题目大意:给你n个点,问你顺次连线能否连成多边形?如果能,就输出多边形面积。

面积用向量的叉积去算。然后能否连成多边形就是看这条线跟之前的线有没有交点。

这些在大白书上都有板子。。

代码:

 #include <cstdio>
#include <cstdlib>
#include <string>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <vector>
#include <map>
#include <set>
#include <iterator>
#include <functional>
#include <cmath>
#include <numeric>
#include <ctime>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define PB push_back
#define MP make_pair
#define SZ size()
#define CL clear()
#define AA first
#define BB second
#define EPS 1e-8
#define ZERO(x) memset((x),0,sizeof(x))
const int INF = ~0U>>;
const double PI = acos(-1.0); struct POINT{
double x,y;
POINT(double ax=,double ay=):x(ax),y(ay) {}
};
typedef POINT VECTOR; POINT pts[]; VECTOR operator- (POINT A,POINT B){
return VECTOR(A.x-B.x,A.y-B.y);
} double CROSS(VECTOR A,VECTOR B){
return A.x*B.y-A.y*B.x;
} double AREA(POINT *p,int n){
double area = ;
for(int i=;i<n-;i++){
area += CROSS(p[i]-p[],p[i+]-p[]);
}
return area/;
} bool SegmentProperIntersection(POINT a1,POINT a2,POINT b1,POINT b2){
double c1 = CROSS(a2-a1,b1-a1) , c2 = CROSS(a2-a1,b2-a1),
c3 = CROSS(b2-b1,a1-b1) , c4 = CROSS(b2-b1,a2-b1);
return c1*c2<EPS && c3*c4<EPS;
} int main(){
int n;
int kase = ;
while( scanf("%d",&n), n ){
if(kase!=) puts("");
bool flag = true;
for(int i=;i<n;i++){
double a,b;
scanf("%lf%lf",&a,&b);
pts[i] = POINT(a,b);
for(int j=;j<i-;j++){
if( SegmentProperIntersection(pts[j],pts[j+],pts[i-],pts[i])) flag = false;
}
}
for(int j=;j<n-;j++){
if( SegmentProperIntersection(pts[j],pts[j+],pts[],pts[n-])) flag = false;
}
double area = fabs(AREA(pts,n));
if( n==||n== ){
printf("Figure %d: Impossible\n",kase++);
continue;
}
if(!flag) printf("Figure %d: Impossible\n",kase++);
else printf("Figure %d: %.2f\n",kase++,area);
}
return ;
}

[ZOJ 1010] Area (计算几何)的更多相关文章

  1. zoj 1010 Area【线段相交问题】

    链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1010 http://acm.hust.edu.cn/vjudge/ ...

  2. [ZJU 1010] Area

    ZOJ Problem Set - 1010 Area Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge Jer ...

  3. POJ 1654 Area 计算几何

    #include<stdio.h> #include<string.h> #include<iostream> #include<math.h> usi ...

  4. ZOJ 3157 Weapon --计算几何+树状数组

    题意:给一些直线,问这些直线在直线x=L,x=R之间有多少个交点. 讲解见此文:http://blog.sina.com.cn/s/blog_778e7c6e0100q64a.html 首先将直线分别 ...

  5. zoj 1010 (线段相交判断+多边形求面积)

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=10 Area Time Limit: 2 Seconds      Mem ...

  6. 1010 Area

    题目要求面积和判断非相邻边不相交.和数学和几何有关系. #include <stdio.h> #include <math.h> #define MISS 0.0000001 ...

  7. POJ2546 Circular Area(计算几何)

                                                                                Circular Area            ...

  8. UVa 1641 ASCII Area (计算几何,水题)

    题意:给定一个矩阵,里面有一个多边形,求多边形的面积. 析:因为是在格子里,并且这个多边形是很规则的,所以所有格子不是全属于多边形就是全不属于,或者一半,并且我们可以根据"/"和“ ...

  9. Hdu-2892 area 计算几何 圆与凸多边形面积交

    题面 题意:有一个凸多边形岛屿,然后告诉你从高空(x,y,h)投下炸弹,爆炸半径r,飞机水平速度和重力加速度,问岛屿被炸了多少 题解:算出来岛屿落地位置,再利用圆与凸多边形面积交 #include&l ...

随机推荐

  1. JQuery Uplodify上传附件(同一个页面多个uplodify控件解决方案)

    功能描述:实现同一页面中多个不同附件的上传保存,且做到最大程度的减少代码修改量(最大程度的公用),为了方便实现垃圾数据和垃圾文件的处理,项目采用临时文件夹的方式:即:文件自动上传先保存到临时文件夹下, ...

  2. 淘宝天猫关键词SEO优化

    淘宝天猫的网站完全像是一个成熟的搜索引擎,只是从google.bing.baidu改成了淘宝天猫而已,普通搜索引擎有品专,有皇冠,有PC,有无线:淘宝天猫里面有钻展,有直通车,也有PC,无线.搜索引擎 ...

  3. webpack需要全局安装,才能使用webpack命令

    webpack全局安装,具体项目中才能使用webpack命令: npm install webpack -g

  4. 一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转

    表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的 ,DAO层就是将访问数 ...

  5. 程序员书单_java web编程篇

    李兴华JavaWeb开发实战经典 http://download.csdn.net/detail/shenzhq1980/9137653 Servlet与JSP核心编程 第2版_1 http://do ...

  6. 工作中简单又实用的vim配置

    set number syntax enable set tabstop=4 set shiftwidth=4 set noexpandtab set cindent set autoindent s ...

  7. 【转】java 自动装箱与拆箱

    java 自动装箱与拆箱 这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆: java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的 ...

  8. HTML5 中已经可以用 Ajax 上传文件了,而且代码非常简单,借助 FormData 类即可发送文件数据。

    <?phpif (isset($_POST['upload'])) { var_dump($_FILES); move_uploaded_file($_FILES['upfile']['tmp_ ...

  9. .NET常用方法——邮件发送

    邮件发送类文件,可直接使用: 调用方法(实例化.静态调用): 实例化: string exception = ""; SendEmail.SendEmail SE = new Se ...

  10. android 开源项目一览

    直接拿来用!最火的Android开源项目(一) http://www.csdn.net/article/2013-05-03/2815127-Android-open-source-projects ...