1010 Area

题目要求面积和判断非相邻边不相交。和数学和几何有关系。

 1 #include <stdio.h>
 2 #include <math.h>
 3
 4 #define MISS 0.0000001
 5
 6 int det(double x1,double y1,double x2,double y2,double x3,double y3){
 7     double w1,w2;
 8     w1=x1*y2+x2*y3+x3*y1;
 9     w2=x2*y1+x3*y2+x1*y3;
10     if(fabs(w1-w2)<MISS)
11         return 0;
12     else if(w1>w2)
13             return 1;
14         else if(w1<w2)
15                 return -1;
16 }
17
18 int main(){
19     int n,i,j,count=0,temp;
20     double x[1000],y[1000],area;
21     while(scanf("%d",&n)&&n){
22         count++;
23         if(count>1)
24             printf("\n");
25         printf("Figure %d: ",count);
26         for(i=0;i<n;i++)
27             scanf("%lf%lf",&x[i],&y[i]);
28         if(n<3){
29             printf("Impossible\n");
30             continue;
31         }
32         for(i=0;i<n;i++){
33             for(j=(i+1)/n;j<i-1;j++){
34                 temp=(i+1)%n;
35                 if (det(x[j],y[j],x[i],y[i],x[j+1],y[j+1])*det(x[j],y[j],x[temp],y[temp],x[j+1],y[j+1])<=0&&
36                 det(x[i],y[i],x[j],y[j],x[temp],y[temp])*det(x[i],y[i],x[j+1],y[j+1],x[temp],y[temp])<=0){
37                     printf("Impossible\n");
38                     goto quit;
39                 }
40             }
41         }
42         area=0;
43         for(i=0;i<n;i++)
44             area+=x[i]*y[(i+1)%n]-y[i]*x[(i+1)%n];
45         printf("%.2lf\n",fabs(area)/2);
46         quit:;
47     }
48     return 0;
49 }
时间: 2024-09-29 19:55:19

1010 Area的相关文章

zoj 1010 Area 判断线段是否相交(把线段扩充一倍后 好处理) + 多边形求面积

题目来源: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=10 题意:  给定n个点的, 如果这n个点不能形成多边形 以及 n < 3 时, 输出, "Impossible",  否则 输出 多边形的面积. 分析: 这题主要在 分析  n 个点 是否形成 多边形.  枚举 每条边,  看 这条边 是否与 其他 n - 3 条边 不规范相交. (当处理 其他 边时, 我们采用 扩充线段一倍) 代码如下: con

[ZOJ 1010] Area (计算几何)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1010 题目大意:给你n个点,问你顺次连线能否连成多边形?如果能,就输出多边形面积. 面积用向量的叉积去算.然后能否连成多边形就是看这条线跟之前的线有没有交点. 这些在大白书上都有板子.. 代码: 1 #include <cstdio> 2 #include <cstdlib> 3 #include <string> 4 #include

ZOJ 1010 Area 求任意多边形面积

主要判断是否是多边形:1.n<3 : 2.非相邻两条线段不相交 #include <iostream> #include <cmath> #include <stdio.h> using namespace std; #define eps 1e-8 int sig(double x) { if(x<-eps) return -1; if(x>eps) return 1; return 0; } struct point { double x,y; }

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

zoj题目分类

饮水思源---zoj 转载自:http://bbs.sjtu.edu.cn/bbscon,board,ACMICPC,file,M.1084159773.A.html 注:所有不是太难的题都被归成了“简单题”,等到发现的时候已经太晚了,我太死脑筋 了……:( 有些题的程序我找不到了,555……:( SRbGa的题虽然都很经典……但是由于其中的大部分都是我看了oibh上的解题报告后做 的,所以就不写了…… 题目排列顺序没有规律……:( 按照个人感觉,最短路有的算做了DP,有的算做了图论. 有些比较

android省市区三级联动案例:(二)项目结构图

目录结构 城市数据address.xml文件 <?xml version="1.0" encoding="utf-8"?> <root name="中国"> <province name="北京市"> <city name="北京市" index="1"> <area name="东城区" index="

SPOJ CIRU The area of the union of circles

You are given N circles and expected to calculate the area of the union of the circles ! Input The first line is one integer n indicates the number of the circles. (1 <= n <= 1000) Then follows n lines every line has three integers Xi Yi Ri indicate

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

链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=10 Area Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge Jerry, a middle school student, addicts himself to mathematical research. Maybe the problems he has thought are

SPOJ CIRU The area of the union of circles (计算几何)

题意:求 m 个圆的并的面积. 析:就是一个板子题,还有要注意圆的半径为0的情况. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cmath> #include <iostream> #include <cstrin