結果

問題 No.253 ロウソクの長さ
ユーザー くわいくわい
提出日時 2015-10-24 11:53:41
言語 Scala(Beta)
(3.4.0)
結果
WA  
実行時間 -
コード長 946 bytes
コンパイル時間 10,104 ms
コンパイル使用メモリ 244,376 KB
実行使用メモリ 80,828 KB
平均クエリ数 37.00
最終ジャッジ日時 2024-07-16 07:51:09
合計ジャッジ時間 45,562 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 WA -
testcase_26 WA -
testcase_27 WA -
testcase_28 WA -
testcase_29 WA -
testcase_30 WA -
testcase_31 WA -
testcase_32 WA -
testcase_33 WA -
testcase_34 WA -
testcase_35 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.util.Scanner

import scala.annotation.tailrec

object Problem253 {

  val sc = new Scanner(System.in)

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

  def answer(len: Int): Unit = {
    println("! " + len)
  }

  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