zoukankan      html  css  js  c++  java
  • Area(poj 1654)

    题目大意:一个坐标系,从原点开始走,然后1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走。给出一串包含1-9的字符串,问你这些点所围成的面积。

    /*
      根据面积公式,Area=1/2*abs((x0*y1-x1*y0)+(x1*y2-x2*y1)...+(xn*yn-1-xn-1*yn)+(xn*y0-x0*yn)) ,
      把相邻两点和原点组成一个三角形,而总面积是这n个三角形面积的和,而三角形面积是两个相邻边向量的叉积。 
    */
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #define N 1000010
    #define lon long long
    using namespace std;
    char ch[N];
    int dx[10]={0,1,1,1,0,0,0,-1,-1,-1};
    int dy[10]={0,-1,0,1,-1,0,1,-1,0,1};
    int main(){
        int T;scanf("%d",&T);
        while(T--){
            int x=0,y=0,len;lon area=0;
            scanf("%s",ch);
            len=strlen(ch);
            if(ch[len-1]!='5'||len<2){
                printf("0
    ");continue;
            }
            for(int i=0;i<len;i++){
                int px=x+dx[ch[i]-'0'];
                int py=y+dy[ch[i]-'0'];
                area+=(lon)x*(lon)py-(lon)px*(lon)y;
                x=px;y=py;
            }
            if(area<0)area=-area;
            cout<<area/2;
            if(area%2) printf(".5");
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    王者荣耀_KEY
    月亮之眼_KEY
    编号中的数学_KEY
    BZOJ1854_游戏_KEY
    BZOJ1059_矩阵游戏_KEY
    最小覆盖_KEY
    Dijkstra堆优化学习
    LuoguP1196_银河英雄传说_KEY
    BZOJ1207_打鼹鼠_KEY
    Codevs1380没有上司的舞会_KEY
  • 原文地址:https://www.cnblogs.com/harden/p/6284222.html
Copyright © 2011-2022 走看看