标签:problem 坐标 init 链接 exe follow enter following out
题目链接:
http://poj.org/problem?id=1654
题目描述:
Description
Input
Output
Sample Input
4 5 825 6725 6244865
Sample Output
0 0 0.5 2
题目大意:
一个人会从原点出发,走一圈回到原点,给你路径,求围成面积的大小
思路:
坑巨多……
首先路径不需要全部记录,读一个面积加上一部分叉乘即可
于是需要记录上一个点的坐标
然后面积只有可能是整数或整数加二分之一
所以用long long记录二倍面积,加快速度
int会爆 ……要用long long
不能用%g输出……手动判断……
手写abs……防止CE
卒_(:з」∠)__
代码:
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 const double EPS = 1e-10; 6 const int N = 24; 7 8 typedef long long LL; 9 10 int a[10] = { 0,-1,0,1,-1,0,1,-1,0,1 }; //记录每种操作走的方向 11 int b[10] = { 0,-1,-1,-1,0,0,0,1,1,1 }; 12 13 inline LL ABS(LL n) { return n >= 0 ? n : -n; } //手动abs 14 15 int main() { 16 int q; 17 char tmp[2]; 18 scanf("%d", &q); 19 while (q--) { 20 LL x = 0, y = 0, area = 0, px = 0, py = 0; 21 int op; 22 while (1) { 23 scanf("%1s", tmp); 24 if (tmp[0] == ‘5‘)break; //5终止 25 op = tmp[0] - ‘0‘; 26 x += a[op], y += b[op]; 27 area += px*y - py*x; //叉乘 28 px = x, py = y; //更新上一个坐标 29 } 30 LL ans = ABS(area); 31 if (ans % 2 == 0)printf("%lld\n", ans / 2); 32 else printf("%lld.5\n", ans / 2); 33 } 34 }
标签:problem 坐标 init 链接 exe follow enter following out
原文地址:http://www.cnblogs.com/hyp1231/p/6984277.html