`
scott________
  • 浏览: 20766 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
最近访客 更多访客>>
社区版块
存档分类
最新评论

poj 1654 Area 多边形面积

阅读更多

    题目描述:http://poj.org/problem?id=1654
    题目大意:从平面坐标原点出发,1-9(除了5)表示不同的方向,最终保证回到原点,路径为一多边形,求多边形的面积。
    解题思路:因为数据量较大,可以不用保存多边形的每个顶点信息,每次读一个数字(即读一段)就计算该线段与原点组成三角形的有向面积。

         1.另外面积area 的保存用int 的话会溢出,所以选用long long(g++) 或__int64(vc6.0)。

         2.dir 数组的设计方便求下一个点的坐标,想不到的话就直接switch语句 吧。


#include <iostream>
#include <cstring>
using namespace std;

struct point {
    int x, y;
    point() {
        x = y = 0;
    }
};

int main() {
int dir[10][2] = {0,0,-1,-1,0,-1,1,-1,-1,0,0,0,1,0,-1,1,0,1,1,1};
    char path[1000005];
    long long area;    //用int 的话会溢出
    int ncase;
    cin>>ncase;
    int len, num, i;
    point back, cur;
    while(ncase--) {
        area = 0;
        cin>>path;
        len = strlen(path);
        for(i = 0; i < len -1; i++) {
            num = path[i] - '0';
            cur.x = back.x + dir[num][0];
            cur.y = back.y + dir[num][1];
            area += back.y * cur.x - back.x * cur.y;
            back = cur;
        }
        if(area < 0)
            area = -area;
        if(area % 2 == 0)
            cout<<area / 2<<endl;
        else
            cout<<area / 2<<".5"<<endl;    //.5  需要特殊处理
    }
    return 0;
}
        
        
        
        
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics