ABC197 - Atcoder/Python精進のための解説メモ

カレンダーアイコン
2021/05/07

ABC197 - A.Rotate

AtCoder公式 | ABC197 - A.Rotate

解答

s = input()
print(s[1:] + s[0])

要点メモ

  • 文字列をスライスして結合できるのがpythonのかわいいところ

ABC197 - B.Visibility

AtCoder公式 | ABC197 - B.Visibility

解答

h, w, x, y = map(int, input().split())
x -= 1
y -= 1
sss = [input() for _ in range(h)]
cnt = -3
for i in range(y, w):
    if sss[x][i] == '.':
        cnt += 1
    if sss[x][i] == '#':
        break
for i in range(y, -1, -1):
    if sss[x][i] == '.':
        cnt += 1
    if sss[x][i] == '#':
        break
for i in range(x, h):
    if sss[i][y] == '.':
        cnt += 1
    if sss[i][y] == '#':
        break
for i in range(x, -1, -1):
    if sss[i][y] == '.':
        cnt += 1
    if sss[i][y] == '#':
        break
print(cnt)

要点メモ

  • 4方向に愚直に数える
  • 初期マスを重複して数えてしまうので-3カウントから始める

ABC197 - C.ORXOR

AtCoder公式 | ABC197 - C.ORXOR

解答

n = int(input())
a = list(map(int, input().split()))
ans = 1 << 30

for i in range(2 ** (n - 1)):
    xsum = 0
    tmp = a[0]
    for j in range(1, n):
        if (i >> (j - 1)) & 1:
            xsum ^= tmp
            tmp = a[j]
        else:
            tmp |= a[j]
    xsum ^= tmp
    ans = min(ans, xsum)
print(ans)

要点メモ

  • しきりを入れるか入れないかでbit全探索
  • bit全探索はめちゃ便利なのでしっかり学んでおきたいところ
  • ORでもXORでも順番に論理演算しても結果は変わらないのも知っておきたい

ABC197 - D.

AtCoder公式 | ABC197 - D.

解答

まだ解いてません

要点メモ