結果
問題 | No.2602 Real Collider |
ユーザー |
|
提出日時 | 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
ソースコード
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" }