Tenka1 Programmer Beginner Contest D Crossing【Python】

問題はこちら

あとでちゃんと解説書きたい。

import sys

# 入力
N = int(input())

# N == 1 は特別扱いした
if N == 1:
   print('Yes\n2\n1 1\n1 1')
   sys.exit()

# N が第何項目の三角数か調べる
M = 0
for i in range(N):
   if N == i * (i + 1) // 2:
       M = i

# N が三角数じゃないときは'No'  
if M == 0:
   print('No')
   sys.exit()

# 構築
S = [[i + j*(j - 1) // 2 for i in range(1, j + 1)] for j in range(M + 1)]
T = [[S[i][j] for i in range(j + 1, M + 1)] for j in range(M + 1)]
ans = [S[i] + T[i] for i in range(M + 1)]

# 出力
print('Yes')
print(M + 1)
for i in range(M + 1):
   print(str(M) + ' ' + ' '.join(map(str, ans[i])))


この記事が気に入ったらサポートをしてみませんか?