zoukankan      html  css  js  c++  java
  • 多边形的面积

    题目描述

    给出一个简单多边形(没有缺口),它的边要么是垂直的,要么是水平的。要求计算多边形的面积。

    多边形被放置在一个X-Y的卡笛尔平面上,它所有的边都平行于两条坐标轴之一。然后按逆时针方向给出各顶点的坐标值。所有的坐标值都是整数(因此多边形的面积也为整数)。

    输入输出格式

    输入格式:

    第一行给出多边形的顶点数n(n≤100)。接下来的几行每行给出多边形一个顶点的坐标值XY(都为整数并且用空格隔开)。顶点按逆时针方向逐个给出。并且多边形的每一个顶点的坐标值-200≤x,y≤200。多边形最后是靠从最后一个顶点到第一个顶点画一条边来封闭的。

    输出格式:

    一个整数,表示多边形的面积。

    输入输出样例

    输入样例#1: 
    10
    0 0
    4 0
    4 1
    3 1
    3 3
    2 3
    2 2
    1 2
    1 3
    0 3
    输出样例#1: 
    9

    分析:
    谁说这题是模拟的??站出来我打死你我。。。一道变态的数学题(计算几何)。。。将一个多边形分为多个三角形进行计算求解。。。具体解释太过麻烦。。。详细看:大佬的分析


    CODE:
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 #include <iostream>
     5 #include <algorithm>
     6 #include <stack>
     7 #define M 1000000
     8 using namespace std;
     9 int n,x[M],y[M],ans;
    10 int read(){
    11     char c=getchar();int ans=0;bool flag=1;
    12     while (c<'0'||c>'9'){if (c=='-') flag=0;c=getchar();}
    13     while (c>='0'&&c<='9') ans=(ans<<1)+(ans<<3)+(c^48),c=getchar();
    14     if (flag) return ans;return ~ans+1;
    15 }
    16 int main(){
    17     n=read();
    18     for (int i=1;i<=n;i++) x[i]=read(),y[i]=read();
    19     x[n+1]=x[1],y[n+1]=y[1];
    20     for (int i=1;i<=n;i++)
    21         ans+=(x[i]-x[i+1])*(y[i]+y[i+1]);
    22     printf("%d",ans/2);
    23     return 0;
    24 }
    
    
    
     
  • 相关阅读:
    CodeDOM浅析(上)
    这段代码居然运行正常
    CodeDOM浅析(下)
    动态生成与编译(七)根据CodeDOM生成源代码
    动态生成与编译(九)CodeDOM的局限
    动态生成与编译(八)动态编译
    新年送大礼
    祝所有的女性朋友们节日快乐!
    预测人民币在2006年最终的收盘价
    2007年春节,祝朋友们:身体健康,万事如意! 度过一个愉快春节!
  • 原文地址:https://www.cnblogs.com/kanchuang/p/11188239.html
Copyright © 2011-2022 走看看