問題はこちら
完
A
N, M = list(map(int, input().split())) print(N*M) # 1の個数はN*M個 """ 考え方 M=1で自由に1を置けるとき:対角線すべてのマスに1を置くのが最もシンプル。 M=1で置く場所を決められたとき:そのマスから対角線と平行なマスに1を置くのが最もシンプル。 M=M'で置く場所を決められたとき:そのマスから対角線と平行なマスに1を置くことをM回行う。マスが重複した場合、自由に選んでいい感じに1を置く。 実装 1を置くマスごとに、斜めのマスを出力する。 1を置いた斜めのラインを管理しておき、重複した数に応じて、まだ1を置いていない斜めのラインに1を置く。 斜めラインの命名は1列目のマスで何行目に1を置くかで行う。(対角線は1、対角線の下のラインだと2, ... N) """ diagonal_lines = set() # 指定されたマスを通る斜めラインの出力 for m in range(M): A,B= list(map(int, input().split())) diagonal_line = (A-B+1)%N if diagonal_line == 0: diagonal_line = N if diagonal_line in diagonal_lines: # 既に出力済みであれば、次のマスの操作へ。 continue diagonal_lines.add(diagonal_line) for i in range(N): if (diagonal_line + i)%N == 0: temp = N else: temp = (diagonal_line + i)%N print(temp, 1 + i) # 不足分の斜めラインの出力 counter = M - len(diagonal_lines) for s in range(1,N+1): if counter == 0: # 斜めラインをM個出力していればBreak break if s in diagonal_lines: # 既に出力済みであれば、次のマスの操作へ。 continue diagonal_lines.add(s) counter -= 1 for i in range(N): if (s + i)%N == 0: temp = N else: temp = (s + i)%N print(temp, 1 + i)
B
N>Mばかり考えており時間切れ
C
D
E
F