結果

問題 No.258 回転寿司(2)
ユーザー ともき
提出日時 2015-07-31 23:48:38
言語 Scala(Beta)
(3.6.2)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 7,282 bytes
コンパイル時間 8,522 ms
コンパイル使用メモリ 249,820 KB
最終ジャッジ日時 2024-11-14 19:08:28
合計ジャッジ時間 9,184 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
-- [E100] Syntax Error: Main.scala:93:70 ---------------------------------------
93 |    def readIntVector()    : Vector[Int]    = parseLineToVector(() => nextInt)
   |                                                                      ^^^^^^^
   |       method nextInt in class MyConsole must be called with () argument
   |
   | longer explanation available when compiling with `-explain`
-- [E100] Syntax Error: Main.scala:94:70 ---------------------------------------
94 |    def readLongVector()   : Vector[Long]   = parseLineToVector(() => nextLong)
   |                                                                      ^^^^^^^^
   |      method nextLong in class MyConsole must be called with () argument
   |
   | longer explanation available when compiling with `-explain`
-- [E100] Syntax Error: Main.scala:95:70 ---------------------------------------
95 |    def readStringVector() : Vector[String] = parseLineToVector(() => nextString)
   |                                                                      ^^^^^^^^^^
   |    method nextString in class MyConsole must be called with () argument
   |
   | longer explanation available when compiling with `-explain`
-- [E100] Syntax Error: Main.scala:179:51 --------------------------------------
179 |    @inline private def isThereReadable() = !isEnd(peek)
    |                                                   ^^^^
    |        method peek in class MyConsole must be called w

ソースコード

diff #
プレゼンテーションモードにする

import scala.annotation.tailrec
import net.pushl.io.MyConsole
package net.pushl {
package number {
// Prime (Prime.scala)
// Number (Number.scala)
// Combi (Combi.scala)
// Optimize (Optimize.scala)
}
package string {
// RollingHash (RollingHash.scala)
}
package geometry {
// Point (Geometry.scala)
// Segment (Geometry.scala)
// Line (Geometry.scala)
}
package datastructure {
// UnionFindTree (UnionFind.scala)
}
package io {
}
}
// Document: http://www.scala-lang.org/api/current/#package
// -----------------------------------------------------------------------------
case class Elm(eaten: Int, log: List[Int])
class Solver(val stdio: MyConsole){
import stdio._ // shadow Console.~
def solve(rest: List[Int], index: Int = 0, memo: Array[Option[Elm]] = Array.fill(1001)(None)) : Elm = {
memo(index) match {
case Some(e) => e
case None => {
rest match {
case Nil => Elm(0, Nil)
case h1 :: Nil => Elm(h1,List(index))
case h1 :: h2 :: t => {
val r1 = solve(t, index + 2, memo)
val a = r1.eaten + h1
val r2 = solve(h2 :: t, index + 1, memo)
val ans = if(a > r2.eaten) Elm(a, index :: r1.log)
else r2
memo(index) = Some(ans)
ans
}
}
}
}
}
def main() : Unit = {
val n = nextInt()
val v = readIntVector().reverse.toList
val e = solve(v)
println(e.eaten)
println(e.log.map(n - _).reverse.mkString(" "))
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
object Main {
def main(args: Array[String]) : Unit = {
val console = new MyConsole(Console.in, Console.out, Console.err)
val solver = new Solver(console)
solver.main()
console.flush()
}
}
package net.pushl.io {
import java.io.{BufferedReader, PrintWriter, PrintStream, PushbackReader}
class MyConsole(val in: BufferedReader, val _out: PrintStream,
val err: PrintStream) {
// PrintWriter do not flush automatically
val out = new PrintWriter(_out,false)
// If argument is null, there are ambiguous which function will be called
def print(obj: Any) = out.print(if(obj == null) "null" else obj.toString)
def println() = out.println()
def println(obj: Any) = out.println(obj)
def printf(text: String, args: Any*) = out.printf(text.format(args : _*))
// NOTE: YOU MUST FLUSH BEFORE END OF MAIN
def flush() = out.flush()
def debugln(obj: Any) = err.println(obj)
def readIntVector() : Vector[Int] = parseLineToVector(() => nextInt)
def readLongVector() : Vector[Long] = parseLineToVector(() => nextLong)
def readStringVector() : Vector[String] = parseLineToVector(() => nextString)
def nextInt() : Int = nextLong().toInt
def nextBigInt() : BigInt = BigInt(nextString())
def nextBigDecimal( ) : BigDecimal = BigDecimal(nextString())
def nextDouble() : Double = nextString().toDouble
def nextLong() : Long = {
if(!goNextValuable())
throw new NoSuchElementException("Reading long failed")
val sgn = if(peek == '-') -1l else 1
if(sgn == -1l) read()
if(peek < '0' || '9' < peek)
throw new NumberFormatException(s"readLong found only '-' or no number")
@tailrec
def readLong(next: Int, cur: Long) : Long =
if('0' <= next && next <= '9')
readLong(readWithoutCheckingPeeked(), cur*10 + next-'0')
else if(isEnd(next) || isSpaceOrControl(next))
sgn*cur
else
throw new NumberFormatException(s"readLong found strange byte $next")
val res = readLong(read(),0)
skipTrailingSpaces()
res
}
def nextString() : String = {
if(!goNextValuable())
throw new NoSuchElementException("Reading String failed")
val builder = new StringBuilder
@tailrec
def appendCode(next: Int) : String = {
if(isEnd(next) || isSpaceOrControl(next)){
builder.toString
}else{
builder.append(next.toChar)
appendCode(readWithoutCheckingPeeked())
}
}
val res = appendCode(read())
skipTrailingSpaces()
res
}
// TODO: refactoring to marge nextString
def readLine() : String = {
if(isEnd(peek))
throw new NoSuchElementException("Reading Line failed")
val builder = new StringBuilder
@tailrec
def appendCode(next: Int) : String = {
if(isEnd(next) || isNewLine(next)){
builder.toString
}else{
builder.append(next.toChar)
appendCode(read())
}
}
appendCode(read())
}
// helpers
private[this] var peeked: Option[Int] = None
private[this] var last = -1
private def read() = {
val res = peeked match {
case None => in.read()
case Some(a) => { peeked = None; a }
}
last = res
res
}
@inline private def readWithoutCheckingPeeked() = {
val res = in.read()
last = res
res
}
@inline private def peek() =
peeked match {
case None => {
val res = in.read()
peeked = Some(res)
res
}
case Some(a) => a
}
@inline private def isEnd(c: Int) = c == -1
@inline private def isNewLine(c: Int) = c == 10 || c == 13 // LF and CR
@inline private def isThereReadable() = !isEnd(peek)
// XXX: this limits c is ASCII?
@inline private def isSpaceOrControl(c: Int) = (0 <= c && c <= 32) || c == 127
@tailrec
final private def goNextNotSpaceNorControl() : Unit =
if(isSpaceOrControl(peek)){
read()
goNextNotSpaceNorControl()
}
final private def skipTrailingSpaces() : Unit = {
@tailrec
def skipTrailingSpacesAux() : Unit = {
if(!isNewLine(last) && !isNewLine(peek) && isSpaceOrControl(peek)){
read()
skipTrailingSpacesAux()
}
}
skipTrailingSpacesAux
if(!isNewLine(last) && isNewLine(peek)) {val _ = read()}
}
@tailrec
final private def skipTrailingSpacesAndNewline() : Unit =
if(isNewLine(peek)){
val _ = read() // windows causes error. maybe.
}else if(isSpaceOrControl(peek)){
read()
skipTrailingSpacesAndNewline()
}
@inline private def goNextValuable() = {
goNextNotSpaceNorControl()
isThereReadable()
}
@inline private def parseLineToVector[X](parser: () => X) : Vector[X] = {
import scala.collection.immutable.VectorBuilder
val vb = new VectorBuilder[X]()
@tailrec
def parseLineToVectorAux(first: Boolean=false) : Vector[X] =
if((!first && isNewLine(last)) || isNewLine(peek) || isEnd(peek)) {
vb.result
}else{
vb += parser()
parseLineToVectorAux()
}
parseLineToVectorAux(true)
}
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0