問題はこちら
No.105 arcの六角ボルト - yukicoder
逆三角関数を使えば良さそうだということはすぐに分かるのだが
abs(x)>1のケースが紛れているのでacos(x)とするとWAを食らう
atan2を使う
int main(){ double x,y,t; int n,i; scanf("%d",&n); while(n--){ scanf("%lf%lf",&x,&y); t=atan2(y,x)/atan(1)*45+180; //atan2の返り値はラジアンなので、45/atan(1)を掛けて度数法に変換 //さらにその結果は-180~180になっているので180を足して正の値にする while(t>51)t-=60; //正しい位置は60の倍数のいずれかなので余りを求める for(i=0;i<5;i++)scanf("%*lf%*lf"); //残りの5つのデータは要らないので捨てる printf("%f\n",t); } return 0; }
読み飛ばしは5回、60を引く処理は最大5回なので、これをうまくまとめる。
ループ終了処理の~scanf(...)もうまく使う
double x,y;i;main(){for(gets(&x);i=~scanf("%lf%lf",&x,&y);printf("%f\n",x))for(x=atan2(y,x)/atan(1)*45+180;i++<3;gets(&y))x>51?x-=60:0;}
136B