「第二回全国統一プログラミング王決定戦予選」参加録
「第二回全国統一プログラミング王決定戦予選」に参加してA, Bの2完でした。約7カ月ぶりのRated参加だったこともあり、「あまりを計算し忘れる」という初歩的な見落としで爆死しました。。。
A - Sum of Two Integers(100点)
- 偶数と奇数で場合分け
N = int(input()) print((N-1)//2)
B - Counting of Trees(300点)
- ノード1からの距離で分類して、距離0から1ずつ段階的に考える
- 前の距離のノードがa個、今の距離のノードがb個ある場合、選択肢がa**b通り増える
- 入力例3の場合は、1*1*(2**3)*(3**1)で24通りになる
- いくつかコーナーケースがあるのに注意
- 距離0のノードは1のみの1個でなければ不可能
- [0 1 1 3]のように、距離の欠損があると不可能
import collections N = int(input()) D = list(map(int, input().split())) c = collections.Counter(D) max_D = max(D) ans = 1 previous_leaf = 1 if D[0] != 0: ans = 0 elif c[0] != 1: ans = 0 else: for i in range(1, max_D+1): ans *= (previous_leaf ** c[i]) ans %= 998244353 previous_leaf = c[i] print(ans)