Comment detail

情報オリンピック2006年度国内本選問題1 (Nested Flatten)

中高生向けの情報オリンピックの国内本選2006年度の問題1です。(実際のコンテストでは、予選通過者36名が対象となっています)

問題内容や注意事項やテストデータ: http://www.ioi-jp.org/joi/2006/2007-ho-prob_and_sol/index.html

問題文(このPDFの2ページ目です): http://www.ioi-jp.org/joi/2006/2007-ho-prob_and_sol/2007-ho.pdf

「問題ごとに、プログラムの実行時間(や使用メモリ量)に制限が設定されています。」にご注意ください。本問では、制限時間1秒、メモリ制限64MBとなっています。

採点は、5~15個のテストデータにおいて正しい結果が返ってくるかで採点されます。入力はinput.txtから、出力はoutput.txtにて行います。(面倒なら標準入出力でもかまわないと思います。)

出題時はサンプルデータのみが公開されており、採点用のデータは出題時は公開されていません。

入出力は標準入出力にて。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
object Hon1 extends Application {
  //Console.setIn(new java.io.FileReader("input.txt"))
  val ary = Console.readLine().split(" ")
  val n = Integer.parseInt(ary(0))
  val k = Integer.parseInt(ary(1))
  val a = List.tabulate(n, i => Console.readInt).toArray
  
  var firstSum = 0
  a.take(k).foreach(v => firstSum += v)
  
  def calc(i:int, prevSum:int, maxSum:int):int = {
    if(i == n) return maxSum
    val curSum = prevSum - a(i - k) + a(i) 
    return calc(i + 1, curSum, Math.max(maxSum, curSum)) 
  }
  
  println(calc(k, firstSum, firstSum))
}

こうやって書くと var をなくせるんですね。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
object Hon1 extends Application {
  //Console.setIn(new java.io.FileReader("input.txt"))
  val ary = Console.readLine().split(" ")
  val n = Integer.parseInt(ary(0))
  val k = Integer.parseInt(ary(1))
  val a = List.tabulate(n, i => Console.readInt).toArray
  
  val firstSum = a.take(k).reduceLeft((i:int,j:int) => i + j)
  def calc(i:int, prevSum:int, maxSum:int):int = {
    if(i == n) return maxSum
    val curSum = prevSum - a(i - k) + a(i) 
    return calc(i + 1, curSum, Math.max(maxSum, curSum)) 
  }
  
  println(calc(k, firstSum, firstSum))
}

Index

Feed

Other

Link

Pathtraq

loading...