原点中心,頂点の一点が $(1,0)$ の正六角形を考える.
それを原点中心,反時計回りに $0$ 度以上 $50$ 度未満回転した後の,各頂点の座標が与えられる.
ただし,与えられる座標には,微小の誤差が含まれている可能性がある.
何度回転したものかを求める問題.
各頂点が原点から何度回った部分にあるかを,例えば,arctanなどを用いて計算する.
その中で,一番,$0$ 度以上,$50$ 度未満っぽい角度を答えれば良い.
もしくは,$1$ つの頂点についてだけ角度を求め,$0$ 度以上 $50$ 度未満っぽい角度になるまで,$60$ 度を足し引きすれば良い.
ただし,座標には誤差が含まれるので,厳密に $0$ 度以上,$50$ 度未満になるとは限らず,ある程度誤差を許容するようにしなければいけない.
#include<bits/stdc++.h>
using namespace std;
#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)
int main(){
int i, j, k;
int T;
double X, Y, th, pi = acos(0)*2;
double res;
scanf("%d",&T);
while(T--){
res = 1e10;
rep(i,6){
scanf("%lf%lf",&X,&Y);
th = atan2(Y,X);
if(th < -1e-9) continue;
res = min(res, th);
}
res = res * 180 / pi;
printf("%.16f\n",res);
}
return 0;
}
Current time: 2024年04月24日05時23分22秒
Last modified: 2014年12月24日00時22分21秒 (by laycrs)
Tags: Competitive_Programming yukicoder
トップページに戻る
Logged in as: unknown user (not login)