結果
問題 | No.241 出席番号(1) |
ユーザー |
![]() |
提出日時 | 2015-09-26 03:50:14 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 29 ms / 2,000 ms |
コード長 | 1,055 bytes |
コンパイル時間 | 114 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 11,008 KB |
最終ジャッジ日時 | 2024-11-30 21:34:04 |
合計ジャッジ時間 | 2,100 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 29 |
ソースコード
def solve():N = int(input())C = [[] for _ in range(N)]for i in range(N):a = int(input())for j in range(N):if j != a:C[j].append(i)for j in range(N):if len(C[j]) == 0:print(-1)return# C[i] は i 番を振ってもよい人のリストD = list(enumerate(C))D.sort(key=lambda il: len(il[1]))# D[x] = (i, l) は i 番を振ってもよい人のリスト。x は l が少ない順に並んでいるans = [0] * Nused = [False] * N# ans[i] は i 番を振った人def dfs(j):if j == N:l = list(zip(ans, range(N)))l.sort()for i, j in l:print(j)return Truedj = D[j]for k in dj[1]:if not used[k]:ans[dj[0]] = kused[k] = Trueif dfs(j + 1):return Trueused[k] = Falsedfs(0)if __name__ == '__main__':solve()