EX17 - ゲーム大会 Editorial /

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} = {}oR_{2, 1} = {}x となります。
  • 2 番目の試合では参加者 3 と参加者 1 が試合を行い参加者 3 が勝ったので、R_{3, 1} = {}oR_{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))