結果
| 問題 | No.635 自然門松列 | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2017-04-10 09:06:13 | 
| 言語 | Ruby (3.4.1) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 169 ms / 650 ms | 
| コード長 | 1,487 bytes | 
| コンパイル時間 | 914 ms | 
| コンパイル使用メモリ | 7,552 KB | 
| 実行使用メモリ | 12,672 KB | 
| 最終ジャッジ日時 | 2024-06-23 08:43:02 | 
| 合計ジャッジ時間 | 3,850 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 1 | 
| other | AC * 23 | 
コンパイルメッセージ
Syntax OK
ソースコード
def scan; gets.split.map{|e|Rational(e)};end
# 🎍
def kadomatu?(a,b,c)
    a!=b&&b!=c&&c!=a&&((a<b&&b>c)||(a>b&&b<c))
end
def solve1(x1,x2,x3,y1,y2,y3)
    STDERR.puts [x1,x2,x3,y1,y2,y3]*" "
    
    
    # 時間0で🎍
    return "YES" if kadomatu?(x1,x2,x3)
    # 十分な時間経過で🎍
    return "YES" if kadomatu?(y1,y2,y3)
    
    # 二分探索する.
    # tL = 0 , tH = +inf(大きな数値)から開始する.
    # 時刻-infのときに竹の長さが昇順だったとすると,時刻+infは降順になっているはずである.
    # どこかで昇順と降順が切り替わっているはずなので,その時刻を探し,🎍になっているかどうか検証する.
    tl = Rational(0)
    th = Rational(1e15)
    
    # 時刻-infでの『昇順/降順』
    greater = (x1-y1*Rational(1e15) < x3-y3*Rational(1e15))
    
    80.times{
        tc = (tl+th)/2
        if kadomatu?(x1+y1*tc, x2+y2*tc, x3+y3*tc)
            STDERR.puts "found #{tc.to_f}"
            return "YES" 
        end
        
        # 時刻-infの『昇順/降順』と時刻tcの『昇順/降順』が等しいなら
        if greater == (x1+y1*tc < x3+y3*tc)
            tl = tc
        else
            th = tc
        end
    }
    STDERR.puts "#{tl.to_f} < t < #{th.to_f}"
    return "NO"
    
end
def solve(x1,x2,x3,y1,y2,y3)
    solve1(x1,x2,x3,y1,y2,y3)
end
n=gets.to_i
n.times{
    x1,x2,x3,y1,y2,y3 = scan
    puts solve(x1,x2,x3,y1,y2,y3)
}
            
            
            
        