結果

問題 No.274 The Wall
ユーザー yuppe19 😺yuppe19 😺
提出日時 2015-09-06 17:37:54
言語 Nim
(2.0.2)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,753 bytes
コンパイル時間 837 ms
コンパイル使用メモリ 65,356 KB
最終ジャッジ日時 2024-04-27 02:09:56
合計ジャッジ時間 1,230 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
/home/judge/data/code/Main.nim(32, 16) Error: type mismatch
Expression: <N
  [1] N: int

Expected one of (first mismatch at [position]):
[1] proc `<`(x, y: bool): bool
[1] proc `<`(x, y: char): bool
[1] proc `<`(x, y: float): bool
[1] proc `<`(x, y: float32): bool
[1] proc `<`(x, y: int16): bool
[1] proc `<`(x, y: int32): bool
[1] proc `<`(x, y: int8): bool
[1] proc `<`(x, y: pointer): bool
[1] proc `<`(x, y: string): bool
[1] proc `<`(x, y: uint): bool
[1] proc `<`(x, y: uint16): bool
[1] proc `<`(x, y: uint32): bool
[1] proc `<`(x, y: uint64): bool
[1] proc `<`(x, y: uint8): bool
[1] proc `<`[Enum: enum](x, y: Enum): bool
[1] proc `<`[T: tuple](x, y: T): bool
[1] proc `<`[T](x, y: ptr T): bool
[1] proc `<`[T](x, y: ref T): bool
[1] proc `<`[T](x, y: set[T]): bool
[2] proc `<`(x, y: int): bool
[2] proc `<`(x, y: int64): bool

ソースコード

diff #

import strutils, sequtils

var
  n, m: int
  l, r: seq[int]
  N: int
  G1, G2: seq[seq[int]]
  visited: seq[bool]
  cmp: seq[int]
  stk: seq[int]

proc nya(v: int) =
  visited[v] = true
  for vv in G1[v]:
    if visited[vv]:
      continue
    nya(vv)
  stk.add(v)

proc nyaa(v, cnt: int) =
  visited[v] = true
  for vv in G2[v]:
    if visited[vv]:
      continue
    nyaa(vv, cnt)
  cmp[v] = cnt

proc scc(): int =
  visited = newSeqWith(N, false)
  cmp = newSeqWith(N, 0)
  stk = newSeq[int](0)
  for v in 0.. <N:
    if visited[v]:
      continue
    nya(v)
  visited = newSeqWith(N, false)
  result = 0
  while len(stk) > 0:
    var v = stk.pop
    if visited[v]:
      continue
    nyaa(v, result)
    result += 1

proc rev(x: int): int = result = m-x-1

proc add_edge(v0, v1: int) =
  G1[v0].add(v1)
  G2[v1].add(v0)

proc add_edges(i, j: int) =
  add_edge(i, j)
  var
    x = if i>=n: i-n else: i+n
    y = if j>=n: j-n else: j+n
  add_edge(y, x)

###
var nm = stdin.readLine.split
n = nm[0].parseInt
m = nm[1].parseInt
l = newSeqWith(n, 0)
r = newSeqWith(n, 0)
for i in 0.. <n:
  var lr = stdin.readLine.split
  l[i] = lr[0].parseInt
  r[i] = lr[1].parseInt
N = 2 * n
G1 = newSeqWith(N, newSeq[int](0))
G2 = newSeqWith(N, newSeq[int](0))
for i in 0.. <n:
  var
    li0 = l[i]
    li1 = r[i].rev
    ri0 = r[i]
    ri1 = l[i].rev
  for j in i+1.. <n:
    var
      lj0 = l[j]
      lj1 = r[j].rev
      rj0 = r[j]
      rj1 = l[j].rev
    if li0 <= rj0 and lj0 <= ri0: add_edges(i,   n+j)
    if li1 <= rj0 and lj0 <= ri1: add_edges(n+i, n+j)
    if li0 <= rj1 and lj1 <= ri0: add_edges(i,   j  )
    if li1 <= rj1 and lj1 <= ri1: add_edges(n+i, j  )
var x = scc()
for i in 0.. <n:
  if cmp[i] == cmp[n+i]:
    echo "NO"
    quit(0)

echo "YES"
0