結果

問題 No.225 文字列変更(medium)
ユーザー nadeshinonadeshino
提出日時 2020-01-14 18:39:17
言語 Nim
(2.0.2)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,936 bytes
コンパイル時間 1,739 ms
コンパイル使用メモリ 72,040 KB
最終ジャッジ日時 2024-11-14 22:02:11
合計ジャッジ時間 2,334 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
/home/judge/data/code/Main.nim(38, 16) Error: type mismatch
Expression: "#" &
  let line`gensym4 = split(readLine(stdin), " ", -1)
  let :tmp_553648471 = line`gensym4
  (:tmp_553648471[0],)
  [1] "#": string
  [2] 
let line`gensym4 = split(readLine(stdin), " ", -1)
let :tmp_553648471 = line`gensym4
(:tmp_553648471[0],): (string,)

Expected one of (first mismatch at [position]):
[1] proc `&`(x, y: char): string
[1] proc `&`(x: char; y: string): string
[1] proc `&`[T](x, y: sink seq[T]): seq[T]
[1] proc `&`[T](x: sink seq[T]; y: sink T): seq[T]
[2] proc `&`(x, y: string): string
[2] proc `&`(x: string; y: char): string
[2] proc `&`[T](x: sink T; y: sink seq[T]): seq[T]

ソースコード

diff #

import algorithm, complex, macros, math, sequtils, sets, strutils, tables

macro unpack*(rhs: seq, cnt: static[int]): auto =
  let v = genSym(); result = quote do:(let `v` = `rhs`;())
  if NimMajor == 0 and NimMinor <= 17:
    for i in 0..<cnt: result[0][1].add(quote do:`v`[`i`])
  else:
    for i in 0..<cnt: result[1].add(quote do:`v`[`i`])

template input*(T: typedesc, cnt: Natural = 1): untyped =
  let line = stdin.readLine.split(" ")
  when T is int:         line.map(parseInt).unpack(cnt)
  elif T is float:       line.map(parseFloat).unpack(cnt)
  elif T is string:      line.unpack(cnt)
  elif T is char:        line.mapIt(it[0]).unpack(cnt)
  elif T is seq[int]:    line.map(parseint)
  elif T is seq[float]:  line.map(parseFloat)
  elif T is seq[string]: line
  elif T is seq[char]:   line.mapIt(it[0])

proc `|=`*(n: var int, m: int) = n = n or m
proc `&=`*(n: var int, m: int) = n = n and m
proc `%=`*(n: var int, m: int) = n = n mod m
proc `^=`*(n: var int, m: int) = n = n xor m
proc `//=`*(n: var int, m: int) = n = n div m
proc `<<=`*(n: var int, m: int) = n = n shl m
proc `>>=`*(n: var int, m: int) = n = n shr m
proc `<?=`*(n: var SomeNumber, m: SomeNumber) = n = min(n, m)
proc `>?=`*(n: var SomeNumber, m: SomeNumber) = n = max(n, m)
proc newSeq2*[T](n1, n2: Natural): seq[seq[T]] = newSeqWith(n1, newSeq[T](n2))
proc newSeq3*[T](n1, n2, n3: Natural): seq[seq[seq[T]]] = newSeqWith(n1, newSeqWith(n2, newSeq[T](n3)))

# -------------------------------------------------- #

const INF = 10 ^ 9

let (N, M) = input(int, 2)
let S, T = "#" & input(string)
var dp: array[-1 .. 1000, array[-1 .. 1000, int]]
for i in -1 .. N:
  for j in -1 .. M:
    if i == 0 and j == 0:
      dp[i][j] = 0
    else:
      dp[i][j] = INF
for i in 0 .. N:
  for j in 0 .. M:
    let c = (if S[i] == T[j]: 0 else: 1)
    dp[i][j] <?= dp[i - 1][j - 1] + c
    dp[i][j] <?= dp[i - 1][j] + 1
    dp[i][j] <?= dp[i][j - 1] + 1
echo dp[N][M]
0