hirohirohirohirosのブログ

地方国立大学に通う情報系学部4年

Atcoder ABC235 振り返り

 バーチャルで参加しました.Dが結局解説を見ないと解けませんでしたがアルゴリズムの根幹は時間内に出来ていたので成長しているとします.

A - Rotate【AC】

 Pythonは文字列の数字とint型の数字を簡単に変換出来るのですぐ実装可能です.

a = input()
print(int(a)+int(a[1])*100+int(a[2])*10+int(a[0]) + int(a[2])*100+int(a[0])*10+int(a[1]))
B - Climbing Takahashi【AC】

 順に右から見ていき今いる高さより低くなった時点で処理を終了させます.

N = int(input())
H = [int(i) for i in input().split()]

i = 0
while i < N-1:
  if H[i] >= H[i+1]:
    break
  i+=1
print(H[i])
C - The Kth Time Query【AC】

 一瞬え?ってなったけれど,Aにある全ての数に対してk個目は何番目にあるかをあらかじめ計算しておけばいいです.

N, Q = map(int, input().split())
A = [int(i) for i in input().split()]
dic = {i:[] for i in set(A)}

for i, a in enumerate(A):
  dic[a].append(i+1)

for _ in range(Q):
  x, k = map(int, input().split())
  try:
    print(dic[x][k-1])
  except:
    print(-1)
D - Multiply and Rotate【解説AC】

 核となるアルゴリズムは解説見る前から完璧に分かっていただけに悔しい.dequeのキューにリストを取ると非常に遅くなるらしい.

from collections import deque
a, N = map(int, input().split())
ans = []

max_num = 10**len(str(N))
flag = [-1]*max_num
flag[1] = 0

d = deque([1])

while d:
  x = d.popleft()
  cou = flag[x]

  if x == N:
    print(cou)
    break

  new_x = x*a
  if new_x < max_num and flag[new_x] == -1:
    flag[new_x] = cou+1
    d.append(new_x)

  x_str = str(x)
  if x > 12 and x_str[-1] != "0":
    new_x = int(x_str[-1] + x_str[:-1])
    if new_x < max_num and flag[new_x] == -1:
      flag[new_x] = cou+1
      d.append(new_x)

else:
  print(-1)