10451 - Ancient Village Sports
http://uva.onlinejudge.org/external/104/10451.html
問題概要
多角形の微妙なところの面積を求めよう。
コード
#include<iostream> #include<cmath> #include<cstdio> using namespace std; const double pi = 2*acos(0); inline double AreaOfCircle(double r){ return r * r * pi; } int main(){ int tc = 0; while(true){ int n; double A; cin >> n >> A; if( n < 3 ) break; //cout << n << A << endl; double spector_r = sqrt( (2*A/n)/(sin((2*pi)/n)) ); double official_r = spector_r * cos( pi / n ); double official = A - AreaOfCircle( official_r ); double spector = AreaOfCircle( spector_r ) - A; ++tc; printf("Case %d: %.5lf %.5lf\n", tc, spector, official ); } return 0; }
解法
多角形を三角形にわけ、面積の、半径に関する式を出す。あとはその半径を利用して、小さいほうの面積計算で必要な半径も出す。