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

メモ

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

yukicoder No.172 UFOを捕まえろ

問題はこちら
No.172 UFOを捕まえろ - yukicoder

原点から与えられた円周上の点までのマンハッタン距離の最大値をMとするとfloor(M)+1が答え
(実際には以下の考察によりMが整数になることはないとわかるのでceil(M)で良い)

丁寧に考察すれば難しい数学を使わなくても求まるが、それはeditorialに任せるとして、数式でゴリ押してみる。
対称性からx,y≧0としてよい。このとき円周上の点は(x+rcosθ,y+rsinθ)で表され
abs( (x+rcosθ)+(y+rsinθ) )の最大値がMとなる。
(x+rcosθ)+(y+rsinθ)=x+y+r(sinθ+cosθ)=x+y+√2*rsin(θ+α) (三角関数の合成を用いた)
θは任意なので第3項は-√2*rから√2*rの値を取る。
x+y≧0なので第3項が√2*rの時に絶対値は最大となり求める答えはfloor(x+y+√2*r)+1

int main(){
	int x,y,r;
	scanf("%d%d%d",&x,&y,&r);
	printf("%d",abs(x)+abs(y)+(int)(r*sqrt(2))+1);
	return 0;
}

rの値が小さいので、sqrt(2)は1.4142と書き換えても通る(1.414ではrが99のときなどでWA)
またintへのキャストを代入で行うことにして

a,b;
main(c){a=scanf("%d%d%d",&a,&b,&c)<printf("%d",a=1+abs(a)+abs(b)+c*1.4142);}

80B