読者です 読者をやめる 読者になる 読者になる

メモ

yukicoderで遊んでいる競プロゆるふわ勢

yukicoder No.105 arcの六角ボルト

問題はこちら
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