結果

問題 No.2602 Real Collider
ユーザー kotatsugame
提出日時 2024-01-12 22:12:11
言語 Ruby
(3.4.1)
結果
AC  
実行時間 1,592 ms / 2,000 ms
コード長 860 bytes
コンパイル時間 528 ms
コンパイル使用メモリ 7,296 KB
実行使用メモリ 77,312 KB
最終ジャッジ日時 2024-09-27 22:39:57
合計ジャッジ時間 52,535 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 78
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #

Q=gets.to_i
Inputs=gets(p).split.map(&:to_r)
def read()
  x,y=Inputs.shift(2)
  return x+y*1i
end
def assert(f)
  raise "Error" unless f
end
x=[read(),read(),read()]
assert(x.uniq.size==3)
def cross(a,b)
  return a.real*b.imag-a.imag*b.real
end
def parallel(a,b)
  return cross(a,b)==0
end
o=0+0i
r=10**20
if !parallel(x[1]-x[0],x[2]-x[0])
  def line(x,y)
    a1=(x+y)/2
    t=y-x
    a2=Complex(a1.real-t.imag,a1.imag+t.real)
    return a1,a2
  end
  a1,a2=line(x[0],x[1])
  b1,b2=line(x[0],x[2])
  d1=cross(a2-a1,b1-a1)
  d2=-cross(a2-a1,b2-a1)
  assert(d1+d2!=0)
  o=b1+(b2-b1)*(d1/(d1+d2))
  r=x.map{|x|(x-o).abs2}
  assert(r.uniq.size==1)
  r=r.max
end
x.combination(2).each{|a,b|
  no=(a+b)/2
  nr=(a-b).abs2/4
  if nr<r&&x.all?{|t|(no-t).abs2<=nr}
    o,r=no,nr
  end
}
assert(Inputs.size==2*Q)
Q.times{
  d=(o-read()).abs2
  puts d<=r ? "Yes" : "No"
}
0