[topic] 情報オリンピック2006年度国内本選問題1
入出力は標準入出力にて。
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))
}
|



yukoba #5566() Rating0/0=0.00
中高生向けの情報オリンピックの国内本選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 reply [ reply ]