计算几何 — 叉积求多边形面积
题目 poj1654 Areas
Areas 这个是我自己开的,进不去的
然后就是一点一点的算了,
#include <iostream>
using namespace std;
// 1 西南 2 南 3 东南 4 向西 5 停止 6 向东 7 西北 8 向北 9 东北
int dx[10] = {0 , -1 , 0 , 1 , -1 , 0 , 1 ,-1 , 0 ,1} ;
int dy[10] = {0 , -1 ,-1 ,-1 , 0 , 0 , 0 , 1 , 1 ,1} ;
typedef long long ll ;
int main()
{
int t ;
cin >> t ;
string str ;
while(t --)
{
cin >> str ;
int len = str.size() ;
ll ans = 0 , px = 0 , py = 0 , ax = 0 , ay = 0 ;
for(int i = 0 ;i < len - 1;i ++)
{
int t0 = str[i] - '0' ;
px = ax + dx[t0] ;
py = ay + dy[t0] ;
ans += (ax * py - ay * px) ;
ax = px , ay = py ;
}
if(ans < 0) ans *= -1 ;
cout << ans /2 ;
if(ans % 2) cout << ".5" << endl ;
// 如果有小数的话,对于这个题目而言肯定是0.5
//但是有个情况就是之前ans/2为0,然后这个地方就不能输出0.5了。
//而是输出.5,这样的话,不管ans/2为多少都可以直接算上了
else cout << endl ;
}
return 0 ;
}