過去問精選 10 問やってみる 6

前までの続きです


ABC 071 B - Not Found (アルファベットは結局 0 〜 25 という値と同じことです)
https://atcoder.jp/contests/abc071/tasks/abc071_b
各文字のカウンターを作りました、もっと楽にできなかっただろうか・・・

S = input()
ans = "None"
W = {"a":0, "b":0, "c":0, "d":0,"e":0,"f":0,"g":0,"h":0,"i":0,"j":0,"k":0,"l":0,"m":0,"n":0,"o":0,"p":0,"q":0,"r":0,"s":0,"t":0,"u":0,"v":0,"w":0,"x":0,"y":0,"z":0}
P = "abcdefghijklmnopqrstuvwxyz"
for i in S:
  W[i] += 1
for p in P:
  if W[p] == 0:
    ans = p
    break
print(ans)


ABC 061 B - Counting Roads (ちょっとした応用問題です)
https://atcoder.jp/contests/abc061/tasks/abc061_b
pythonで順番を保持したハッシュがあったはず、それをつかったほうがスマート??

N, M = map(int, input().split())
load = {}
for i in range(N):
  load[i] = 0
for i in range(M):
  a, b = map(int, input().split())
  load[a-1] += 1
  load[b-1] += 1
for i in range(N):
  print(load[i])

ABC 047 B - Snuke's Coloring 2 (ABC Edit) (二次元配列を用意します)
https://atcoder.jp/contests/abc047/tasks/abc047_b
これ、めちゃくちゃドはまりしたので別で書きます

ABC 091 B Two Colors Card Game (std::map が使えると楽です)
https://atcoder.jp/contests/abc091/tasks/abc091_b
setをうまく使ったけど、もっと簡略化できた気がする・・・

N = int(input())
nn = []
mm = []
ll = []
ans = 0
for i in range(N):
  k = input()
  nn.append(k)
  ll.append(k)
M = int(input())
l_s = set(ll)
for i in range(M):
  k = input()
  mm.append(k)
for i in l_s:
  count = 0
  for j in nn:
    if i == j:
      count += 1
  for j in mm:
    if i == j:
      count -= 1
  if count > ans:
    ans = count
print(ans)

ABC 081 C - Not so Diverse (C 問題ですが十分挑めます、バケット法とソートの複合問題です)
https://atcoder.jp/contests/abc081/tasks/arc086_a
はじめて順序付きの配列を試してみました
もっと簡単な方法があったかも??
参考:
https://note.nkmk.me/python-collections-ordereddict/

from collections import OrderedDict

N, K =map(int, input().split())
a = list(map(int, input().split()))
p = OrderedDict()
for i in a:
  if i not in p:
    p[i] = 1
  else:
    p[i] +=1
#print(p)
p_rev = OrderedDict(
    sorted(p.items(), key=lambda x: x[1])
)
#print(p_rev)
#print(len(p_rev))
count = 0
sum = 0
for i in p_rev.values():
  if len(p_rev) - count > K:
    sum += i
    count += 1
  else:
    break
print(sum)


以上