結果
| 問題 |
No.274 The Wall
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-09-06 17:37:54 |
| 言語 | Nim (2.2.0) |
| 結果 |
CE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,753 bytes |
| コンパイル時間 | 787 ms |
| コンパイル使用メモリ | 65,824 KB |
| 最終ジャッジ日時 | 2024-11-14 19:10:27 |
| 合計ジャッジ時間 | 1,153 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、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
ソースコード
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"