結果

問題 No.253 ロウソクの長さ
コンテスト
ユーザー くわい
提出日時 2015-10-24 12:05:26
言語 Scala(Beta)
(3.8.2)
コンパイル:
scalac _filename_
実行:
/usr/bin/scala_run _class_
結果
WA  
実行時間 -
コード長 992 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 7,833 ms
コンパイル使用メモリ 255,872 KB
実行使用メモリ 77,820 KB
平均クエリ数 37.00
最終ジャッジ日時 2026-03-09 14:05:27
合計ジャッジ時間 26,180 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other WA * 36
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import java.util.Scanner

import scala.annotation.tailrec

object Problem253 {

  val sc = new Scanner(System.in)

  def question(len: Int): Int = {
    println("? " + len)
    System.out.flush()
    sc.nextInt()
  }

  def answer(len: Int): Unit = {
    println("! " + len)
    System.out.flush()
  }

  def waitBurnout() = while (question(0) != 0) {}

  def search(): Int = {
    @tailrec
    def searchR(min: Int, max: Int): Int = {
      val mid = (min + max) / 2

      question(mid) match {
        case 1 => searchR(mid - 1, max - 1)
        case 0 => mid - 1
        case -1 => searchR(min - 1, mid - 1)
      }
    }

    val min = 100
    val max = Math.pow(10, 9).toInt
    searchR(min, max)
  }

  def main(args: Array[String]): Unit = {
    if (question(101) != -1) {
      val result = search()
      answer(result)
    } else {
      // 0以下の処理が面倒なので長さが100以下の場合は燃え尽きるまで待つ
      waitBurnout()
      answer(0)
    }
  }
}
0