🎉
【ABC296】AtCoder Beginner Contest 296 A-D 振り返り【Python】
A - Alternately
文字列Sを1文字ずつ順番に取り出し、前の文字を一致していれば No
を出力する。すべて取り出すことに成功したら Yes
と出力する。注意点として前の文字を空文字などで初期化する必要がある。
Python
n = int(input())
s = list(input())
pre = ""
for i, s_str in enumerate(s):
if pre == s_str:
print("No")
exit()
pre = s_str
print("Yes")
B - Chessboard
グリッドに相当する2次元配列を作成し、値が *
になるまで要素を取り出し続ける。値が *
の場合、行数をi, 列数をjとおく。アルファベットは chr()
のメソッドで出力し、数字は 8-j
を出力する。
Python
s_board = [list(input()) for i in range(8)]
# print(s_board)
for i in range(8):
for j in range(8):
if s_board[i][j] == "*":
moji = chr(97 + j) # chr(97) = a, chr(98) = b
print(f"{str(moji)}{8-i}")
C - Gap Existence
Python
n, x = map(int, input().split())
a_list = set(map(int, input().split()))
for pt in a_list:
if pt + x in a_list:
print("Yes")
exit()
print("No")
D - M<=ab
コンテスト中は積の形で表される2つの整数を同時に考えず、1つを固定してもう1つを探索から外すことが重要だと感じた。片方を固定する考えがあれば実装は容易。
Python
N, M = map(int, input().split())
ans = 10**18
# a <= bを仮定する
for a in range(1, N + 1):
b = M // a
if not M % a == 0: # 余りが発生した (掛け算してMに達しない) 場合は+1
b += 1
if b <= N: # bはNを超えない
ans = min(ans, a * b)
if b < a: # a<=b<=N に反する
break
if ans == 10**18:
print(-1)
else:
print(ans)
Discussion