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])))
この記事が気に入ったらサポートをしてみませんか?