AtCoder Beginner Contest 166 振り返り

参照

atcoder.jp

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)

qiita.com

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喰らいました。