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

    链接:http://poj.org/problem?id=1654

    题意:求多边形面积。

    思路:题目较为简单,得到多边形的顶点,然后求面积。

    #include<cstdio>
    #include<cmath>
    #include<cstring>
    using namespace std;
    
    const int maxn=1000000+5;
    char s[maxn];
    
    struct Point
    {
        int x,y;
    }p[maxn];
    
    int Cross(Point a,Point b)
    {
        return a.x*b.y-b.x*a.y;
    }
    int main()
    {
        int t,len;
        long long area;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%s",s);
            len=strlen(s);
            area=0;
            p[0].x=0;p[0].y=0;
            p[len].x=0;p[len].y=0;
            for(int i=0;i<len;i++)
            {
               switch(s[i])
               {
                case '6': p[i+1].x=p[i].x+1;p[i+1].y=p[i].y;break;
                case '4': p[i+1].x=p[i].x-1;p[i+1].y=p[i].y;break;
                case '2': p[i+1].y=p[i].y-1;p[i+1].x=p[i].x;break;
                case '8': p[i+1].x=p[i].x;p[i+1].y=p[i].y+1;break;
                case '1': p[i+1].x=p[i].x-1;p[i+1].y=p[i].y-1;break;
                case '3': p[i+1].x=p[i].x+1;p[i+1].y=p[i].y-1;break;
                case '9': p[i+1].x=p[i].x+1;p[i+1].y=p[i].y+1;break;
                case '7': p[i+1].x=p[i].x-1;p[i+1].y=p[i].y+1;break;
               }
                   area+=Cross(p[i],p[i+1]);
            }
            if(area<0) area=-area;
            if(area%2==0) printf("%I64d\n",area/2);
            else printf("%I64d.5\n",area/2);
        }
        return 0;
    }

    由于最后结果只可能是整数或者 .5 所以用area用整形处理,另外,在结果中可能会超过int,所以要用long long。

    在计算过程中,一开始每次求叉积我都算的是叉积的绝对值,自然wa了,求面积直接累加叉积的值,因为三角形的面积是有向的,最后再取绝对值。

  • 相关阅读:
    bash中执行SQL语句返回一个值
    对机器特定端口增加网络延迟
    修改jmeter的界面文字大小和语言
    pip3 安装一直报错ssl问题,重装python3
    robotframework学习
    jmeter
    python3向oracle插入数据
    oracle使用时注意
    人心惟危,道心惟微,惟精惟一,允执厥中。
    vim 离线安装 .tar.gz 源码程序
  • 原文地址:https://www.cnblogs.com/54zyq/p/3069557.html
Copyright © 2011-2022 走看看