AHC008のスタート日に開催予定でしたが、サーバートラブルで1週間延期になったABC239の参加記録です。
使用言語はPython3で、レートは800程度です。(コンテスト時点では緑、書いている現時点では茶です。)
A – Horizon
標準入出力と四則演算、平方根の計算ができるかが問われる問題。
平方根の計算は、math モジュールの sqrt(N)
や paw(N,0.5)
, N**0.5
というように書けます。
あとは、平方根の中身を計算して、平方根を求めた値を出力すればOKですね。
# デンソークリエイトプログラミングコンテスト2022(AtCoder Beginner Contest 239)
# A - Horizon
H = int(input())
ans = H * (12800000 + H)
ans = pow(ans, 0.5)
print(ans)
上記は、Nの平方根を取得するのに、pow(N,0.5)
を使用した例ですが、他の種類の平方根の取得方法でもOKですね。
H = int(input())
print((H*(12800000 + H))**0.5)
import math
H = int(input())
print(math.sqrt(H*(12800000 + H)))
B – Integer Division
Python3の接待問題。
Python3では、切り捨ての計算をする // で答えが求まります。負の値の計算についても、問題文にある通り、ある値以下の中での最大の整数を返す仕様になっています。
# デンソークリエイトプログラミングコンテスト2022(AtCoder Beginner Contest 239)
# B - Integer Division
X = int(input())
print(X//10)
C – Knight Fork
グリッドでの移動先を効率よく求められるかの問題。
問題文にある通り、距離が5になる格子点は、8つしかありません。
片方の座標から、距離が5になる座標を全て求めて、もう一方の座標でも距離が5になる座標を求めて、初めに求めた点と一致する座標があれば”Yes”を出力したらOKですね。
グリッドの移動先については、x軸方向に移動する距離とその時にy軸方向に移動する距離を別の配列にもっておくとわかりやすくなりますね。
# デンソークリエイトプログラミングコンテスト2022(AtCoder Beginner Contest 239)
# C - Knight Fork
x1, y1, x2, y2 = map(int,input().split())
# (x1,y1)から距離5の格子点の集合
lattice_points = set()
# 距離5の格子点となるx座標とy座標の地点
dx = [1, 1,-1,-1, 2, 2,-2,-2]
dy = [2,-2, 2,-2, 1,-1, 1,-1]
for dir in range (8):
nx = x1 + dx[dir]
ny = y1 + dy[dir]
lattice_points.add((nx,ny))
for dir in range (8):
nx = x2 + dx[dir]
ny = y2 + dy[dir]
if (nx,ny) in lattice_points:
print("Yes")
exit()
print("No")
コメント