2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

nimで競プロするときに、長さ・要素数が0かもしれない整数列の入力を処理する方法

Last updated at Posted at 2023-04-19

バージョン

nim: 1.0.6

要約

"".split()@[""]を返すので、""parseIntをしてエラーになってしまう。
"".splitWhiteSpace()@[]を返すので長さが0になりうる時はsplitWhiteSpaceを使う。

説明

(toTupleは自作マクロです。気にしないでください。)

例題: https://atcoder.jp/contests/abc289/tasks/abc289_b

split をつかう

# 入力の処理部分だけ抜粋
let
  (N, M) = stdin.readLine.split.map(parseInt).toTuple(2)
  A = stdin.readLine.split.map(parseInt)

splitを使った提出

結果: RE
サンプルにもある長さが0の時にエラーになってしまう。

splitWhiteSpace をつかう

# 入力の処理部分だけ抜粋
let
  (N, M) = stdin.readLine.split.map(parseInt).toTuple(2)
  A = stdin.readLine.splitWhitespace.map(parseInt)

splitWhiteSpaceを使った提出

結果: AC

結論

配列タイプの入力の長さが0になりそうな時はsplitWhiteSpaceを使うといい。

ちなみに

なぜこんな仕様なのか調べると、splitの結果をjoinし直した時に元に戻るからという理由がでてきた。確かに。

自分はpythonで育ったので、一つの関数でできたら嬉しいなと思ってsplitWhiteSpaceを紹介したがsplitしてfilterIt(it != "")してもいい。

また、本題以外の説明を省いているのでわからなかったら聞いてください。または調べてください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?