Atcorder_ABC198:初学者がAtcorder初参戦!
Pythonに触れて約4か月経過したので、初めてAtcorderのABC198に参加してみました。
結果は時間内にA, B, Cに回答。初学者にしては良い船出だったと思います。
成長記録としてこれから毎回ブログに残そうかな…(できるかな?)
灰色が当面の目標が茶色なので。えっ…今回の成績じゃ全然ダメなの?
と思いきや、初参加時のリセマラ防止の強い下方補正がかかったようです。
当分の間、以下の方針で勉強しようと思います。
【方針】
・コンテストに慣れるため、ABCには必ず参加する
・復習は必ず実施して、本番のハマったポイントは必ず明確化する
・継続が力になると信じて、毎日必ず1問演習する
以下が生々しい初学者の提出コードと回答例
A問題
n= int(input())
if n <= 1:
print(0)
else:
print(N-1)
1で場合分けした意味よ…
# 模範回答例
N = int(input())
print(N-1)
B問題
n = input()
# print("文字数", len(n))
# print("N:",n)
# print("reverseN:",n[::-1])
if n == n[::-1]:
print("Yes")
else:
for i in range(len(n)):
if n[-1-i] == '0':
n = '0' + n
else:
break
# print(n)
if n == n[::-1]:
print("Yes")
else:
print("No")
文字列[::-1]で逆になることが個人的なポイントでした。
#模範回答例
S=input()
for i in range(10):
T = "0"*i + S
if T==T[::-1]:
print("Yes")
exit()
print("No")
C問題
r, x, y = map(int, input().split())
l = (x**2 + y**2)**0.5
sho = l // r
amari = l % r
# print("距離",l)
# print("1歩で進む距離",r)
# print("直線歩数",sho)
# print("残り距離", l-sho*r)
# print("計算あまり",amari)
if amari == 0.0:
print(int(sho))
else:
if sho ==0:
print(2)
else:
# print(f"残りの距離は{l - r * int(sho-1)}です。")
print(int(sho)+1)
1歩で進む距離Rより目標座標が小さい場合の考慮を忘れて時間を無駄にしました。
ここをスムーズに気付けばDも解けたかも(?)
# 模範回答例
import math
R,X,Y=map(int,input().split())
D=math.sqrt(X*X+Y*Y)
if D==R:
print(1)
elif D<=R+R:
print(2)
else:
print(math.ceil(D/R))
次回から込み入った計算を行う際にはmathライブラリを使用するか。
速度がどれだけ違うか検証してみようかな。
[Note]
math.ceil(): 小数点以下を切り上げ
math.floor(): 小数点以下切り捨て
毎回必ずABCには参加して早いとこ茶色になりたいところ。