poj 1654(计算几何)(差乘运用)
2016-05-13 20:32
459 查看
任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出。
证明: http://www.cnblogs.com/vbspine/archive/2013/03/28/2987818.html
证明: http://www.cnblogs.com/vbspine/archive/2013/03/28/2987818.html
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<string> #include<cmath> using namespace std; typedef long long LL; const int N = 1000500; char direction[][2] = { -1,-1,0,-1,1,-1,-1,0,0,0,1,0,-1,1,0,1,1,1 }; char dir ; int polygon [2];//储存坐标 int len; LL Area_Triangle(int k,int d) { return polygon[k][0] * polygon[d][1] - polygon[k][1] * polygon[d][0]; } LL Area() { LL s = 0; for (int i = 0; i < len - 1; i++) { s += Area_Triangle(i, i + 1); } s += Area_Triangle(len - 1, 0); if (s > 0) return s; else return -1*s; } int main() { int t; #ifdef glx freopen("in.txt", "r", stdin); #endif scanf("%d", &t); while (t--) { scanf("%s", dir); len = strlen(dir); polygon[0][0] = 0; polygon[0][1] = 1; for (int i = 1; i < len; i++) { int num = dir[i-1] - '1'; polygon[i][0] = polygon[i - 1][0] + direction[num][0]; polygon[i][1] = polygon[i - 1][1] + direction[num][1]; } LL area = Area(); if (area % 2 == 0) printf("%I64d\n", area / 2); else printf("%I64d.5\n", area / 2); } return 0; }
相关文章推荐
- [Leetcode] 278. First Bad Version
- Android内核开发:在源码树中添加新的app应用
- java 基础题之 分数
- java中instanceof用法
- POJ2299(归并排序)
- PHP文件上传(1)
- Qml中ToolTip的创建
- Android 学习笔记之七 Application类
- 团队冲刺第十天
- NYOJ 32 组合数(dfs)
- [BZOJ2809][Apio2012]dispatching(枚举&dfs序+主席树||可并堆||splay+启发式合并)
- GDOI2016题解
- [JZOJ1598]文件修复
- 如何上传python
- 如何上传python
- STM32_BKP备份数据
- Java集合框架—Map
- 阅读郭林《第一行代码》的笔记——第1章 开始启程,你的第一行Android代码
- WIN32汇编 Richedit控件的使用
- Android内核开发:从源码树中删除出厂的app应用