ライブラリ・ソートの使用(推定数)


完全なナビゲーション(遡及、ステータスツリー、エッジの切断)-深度優先ナビゲーションベース


に質問


すいていすうれつ


一番上の列には1からNまでの数字が書いてあります.そして、2行目からパスカルの三角形のように、上の2つを加算した値が格納されます.たとえば、Nが4で、一番上の行が3 1 2 4の場合、次の三角形が描画されます.

Nと一番下の数字が与えられた場合、一番上の行の数字を求めるプログラムを作成してください.しかし、答えがいろいろある場合は、一番前のものを辞書順に印刷します.
■説明の入力
第1行は2つの整数N(1≦N≦10)とFを与える.Nは最上行数の個数を表し、Fは最下行数100000以下である.
■出力説明
最初の行では、三角形の一番上のN個の数字をスペースで区切って出力します.答えが存在しなければ入力できません.
■入力例1
4 16
■出力例1
3 1 2 4

コード#コード#💻


にこうけいすう



に答える

import sys
import itertools as it
#sys.stdin=open("input.txt", "rt")      # read text

n, f = map(int, input().split())
b = [1] * n
for i in range(1, n):
    b[i] = b[i-1] * (n - i) // i
a = list(range(1, n+1))

for tmp in it.permutations(a):         # 순열
    sum = 0
    for L, x in enumerate(tmp):        # index, value 모두 접근
        sum += x * b[L]
    if sum == f:
        for x in tmp:
            print(x, end = " ")
        break
リファレンス
  • インフラストラクチャ:Pythonアルゴリズム回答