1100:Area of Polygons
多角形の頂点の個数と頂点座標が時計回りに与えられるので
多角形の面積を求める問題。
http://www004.upp.so-net.ne.jp/s_honma/urawaza/area2.htm
↑を参考に多角形の面積を求める関数を実装した。
#include<cmath> #include<algorithm> #include<iostream> #include<vector> #include<cstdio> #define curr(P, i) P[(i) % P.size()] #define next(P, i) P[(i+1) % P.size()] using namespace std; struct point{ double x, y; }; double areaPol(vector<point> t){ double area=0; for(int i=0;i<t.size();i++) area+=(curr(t,i).x-next(t,i).x)*(curr(t,i).y+next(t,i).y); return abs(area)/2.0; } int main(void){ int n,turn=1; point p; vector<point>t; while(cin >> n,n){ t.clear(); for(int i=0;i<n;i++){ cin >> p.x >> p.y; t.push_back(p); } printf("%d %.1f\n",turn++,areaPol(t)); } return 0; }