

Time Limit: 2 sec / Memory Limit: 1024 MiB
問題文
あるゲーム大会に 1 から N の番号が割り当てられた N 人が参加し、総当たり形式で試合が行われます。これまでに M 回の試合が行われました。i 番目 (1 ≤ i ≤ M) の試合では参加者 A_i と参加者 B_i が勝負し、勝者は参加者 A_i で、敗者は参加者 B_i でした。
M 回の試合が終了した時点での試合結果の表を作成し、出力してください。
制約
- 1\le N\le 100
- 0\le M\le \frac{N\cdot(N-1)}{2}
- 1\le A_i, B_i\le N\ (1 \le i \le M)
- A_i \neq B_i\ (1 \le i \le M)
- 同じ参加者同士が 2 回以上試合を行うことはない
- 入力される値はすべて整数である
入力
入力は次の形式で標準入力から与えられる。
N M A_1 B_1 A_2 B_2 A_3 B_3 : : A_M B_M
出力
M 試合が終了した時点での試合結果の表を以下の形式で出力せよ。
R_{1, 1} R_{1, 2} R_{1, 3} \cdots R_{1, N} R_{2, 1} R_{2, 2} R_{2, 3} \cdots R_{2, N} R_{3, 1} R_{3, 2} R_{3, 3} \cdots R_{3, N} \vdots \vdots \vdots \vdots \ddots \vdots R_{N, 1} R_{N, 2} R_{N, 3} \cdots R_{N, N}
ここで、R_{i, j} (1 ≤ i,j ≤ N) は以下で定義される文字である。
- 参加者 i と参加者 j が試合をした場合
- その試合で参加者 i が勝ったなら、R_{i, j} = {}
o
- その試合で参加者 i が負けたなら、R_{i, j} = {}
x
- 参加者 i と参加者 j が試合をしていない場合
- R_{i, j} = {}
-
入出力例も参考にしてください。
サンプルプログラム
N, M = map(int, input().split()) AB = [list(map(int, input().split())) for i in range(M)] # ここにコードを追記する
ジャッジでは以下の入力例以外のケースに関してもテストされることに注意。
入力例1
3 2 1 2 3 1
出力例1
- o x x - - o - -
- 最初の試合では参加者 1 と参加者 2 が試合を行い参加者 1 が勝ったので、R_{1, 2} = {}
o
、R_{2, 1} = {}x
となります。 - 2 番目の試合では参加者 3 と参加者 1 が試合を行い参加者 3 が勝ったので、R_{3, 1} = {}
o
、R_{1, 3} = {}x
となります。 - これ以外の試合は行われていないので、残りのマスは R_{i, j} = {}
-
となります。
入力例2
7 12 1 5 5 4 6 2 1 7 2 4 6 3 1 3 6 4 3 7 5 7 4 3 6 1
出力例2
- - o - o x o - - - o - x - x - - x - x o - x o - x x - x - - o - - o o o o o - - - x - x - x - -
入力例3
1 0
出力例3
-
ヒント
まずは、試合結果の表をプログラムで管理するために、N\cross Nの2次元配列を用意しましょう。 初期値が0で縦a行、横b列の2次元配列の宣言方法は次の通りでした。クリックでヒントを開く
result = [[0] * b for _ in range(a)]
テスト入出力
書いたプログラムがACにならず、原因がどうしてもわからないときだけ見てください。
データが大きすぎるため省略クリックでテスト入出力を見る
テスト入力1
4 6
1 2
1 3
1 4
2 3
2 4
3 4
テスト出力1
- o o o
x - o o
x x - o
x x x -
テスト入力2
20 56
14 18
8 19
18 20
5 15
17 3
12 15
7 3
14 12
18 17
2 12
4 12
17 5
11 10
14 13
8 5
8 1
16 13
17 7
16 18
20 8
10 7
9 20
17 11
8 2
6 4
9 19
13 3
7 15
13 9
4 2
18 7
20 2
17 2
8 18
5 16
1 12
6 1
11 2
9 6
11 15
17 19
18 6
8 17
15 10
10 6
1 18
15 19
9 7
2 14
4 19
20 11
16 12
5 2
16 9
13 2
12 20
テスト出力2
- - - - - x - x - - - o - - - - - o - -
- - - x x - - x - - x o x o - - x - - x
- - - - - - x - - - - - x - - - x - - -
- o - - - x - - - - - o - - - - - - o -
- o - - - - - x - - - - - - o o x - - -
o - - o - - - - x x - - - - - - - x - -
- - o - - - - - x x - - - - o - x x - -
o o - - o - - - - - - - - - - - o o o x
- - - - - o o - - - - - x - - x - - o o
- - - - - o o - - - x - - - x - - - - -
- o - - - - - - - o - - - - o - x - - x
x x - x - - - - - - - - - x o x - - - o
- o o - - - - - o - - - - x - x - - - -
- x - - - - - - - - - o o - - - - o - -
- - - - x - x - - o x x - - - - - - o -
- - - - x - - - o - - o o - - - - o - -
- o o - o - o x - - o - - - - - - x o -
x - - - - o o x - - - - - x - x o - - o
- - - x - - - x x - - - - - x - x - - -
- o - - - - - o x - o x - - - - - x - -
テスト入力3
解答例
必ず自分で問題に挑戦してみてから見てください。
クリックで解答例を見る
N, M = map(int, input().split())
AB = [list(map(int, input().split())) for i in range(M)]
result = [["-"] * N for _ in range(N)]
for a, b in AB:
a -=1
b -=1
result[a][b] = "o"
result[b][a] = "x"
for row in result:
print(" ".join(row))