AtCoder Beginner Contest 166 振り返り
参照
A問題
順調。2分くらい。
S = input() if S[1]=='B': print('ARC') else: print('ABC')
B問題
10分以内に解けました。
tertools.chain.from_iterableは二重配列を分解して一次元の順列にしてくれます。 ((1,2,3),4) -> (1,2,3,4)
import itertools n,k = map(int, input().split()) lis = [] for i in range(k): d = input() a = list(map(int, input().split())) lis.append(a) aa = set(list(itertools.chain.from_iterable(lis))) print(n-len(aa))
C問題
良い展望台を出力する問題。
良い展望台の定義とは・・・
- 道で繋がっている全ての展望台よりも高い
- 道で繋がっていない展望台
「道で繋がっている2つの展望台のうち、"低い方の展望台"と"同じ高さの場合は両方の展望台"をメモします。
最後にN個の展望台から先ほどメモした展望台を削除すると、"良い展望台"が出力されます。
自分の場合、上記の条件に加えて、
- 繋がっている道が1つのみの展望台
という条件を勘違いで加えてしまい、それで妙にかなり時間をロスしました。
しっかり問題とサンプルコードは読まないといけませんね。
import collections n,m = map(int,input().split()) h = list(map(int, input().split())) lis_h = [] for j in range(m): a,b = map(int, input().split()) if h[a-1]>h[b-1]: lis_h.append(b) elif h[b-1]>h[a-1]: lis_h.append(a) else: lis_h.append(a) lis_h.append(b) print(n-len(set(lis_h)))
D問題
解いてみましたが、WA喰らいました。