題意
在乙個網格中,你當前在起始點,然後給你一些數字,每個數字表示你往當前位置的8個方向走乙個單位或根號2個單位(斜線方向)。然後你到了下乙個網格點了,就這樣讓你走出乙個多邊形,要你輸出該多邊形的面積. 題目保證最後一步是回到原點,且保證能形成多邊形。1,2,3,4,6,7,8,9分別表示西南、南、東南、西、東、西北、北、東北
輸入
整數t (1 <= t <= 20)表示樣例組數,每組一行數字序列,長度不超過1000000,以5結尾,數字序列表示從起始點出發的行進方向。
輸出
形成的多邊形的面積。
樣例輸入
4
5825
6725
6244865
樣例輸出
0
00.5
2
分析
問題與起始點沒有關係,因此可以將起始點設為原點,然後使用叉積求多邊形的面積,需要注意的是,如果我們使用double型別表示面積,就不好按題目格式輸出,考慮到各個點都是整數,且容易知道多邊形的面積是0.5的倍數,因此我們可以使用long long型別表示面積,使用叉積算面積時先不除2,最後統一除2,通過檢視是否為奇數,來決定是否在其後加0.5。具體看程式
c++程式
#include#include#includeusing namespace std;
const int n=1000005;
typedef long long ll;
char s[n];
//方向
int d[2]=,,,,,,,,,};
struct point
point(ll x,ll y):x(x),y(y){}
point operator -(const point &a)const
ll operator ^(const point &a)const };
int main()
if(ans<0) ans=-ans;
printf("%lld%s\n",ans/2,ans%2==1?".5":"");
} return 0;
}
POJ 1654 Area 求多邊形面積
7 8 9 4 5 6 1 2 3 如上鍵位,從原點開始,按數字幾就是往哪個方向走,5停止 求從原點開始,走過這些的路徑圍成的多邊形的面積,用叉積來算就好了,以原點為起點,很easy 不過爆int了沒弄清楚範圍,wa了幾發!還有就是哪個輸出,一定要弄成這樣,我試了別的都wa。include incl...
POJ 1654 Area(任意多邊形面積)
by cxlove 題目 從乙個點出發,8個方向,給出每一步的方向,求出走過的路徑形成的多邊形的面積。不過題目說了會首尾相接,而且不會有交叉,不過顯然不一定是凸多邊形。其實利用向量叉積求解多邊形面積,也不只是適用於凸邊形。出現凹的部分,剛好一正一負,抵消了。不過這題討厭的是精度。double是不能過...
POJ 1654 Area(計算幾何)
description 乙個座標系,從原點開始走,然後1 4分別代表,向右下走,向右走,向右上走,向下走,5代表回到原點,6 9代表,向上走,向左下走,向左走,向左上走。給出一串包含1 9的字串,問你這些點所圍成的面積 input 第一行為用例組數t,之後t行每行乙個由1 9組成的字串 output...