【AtCoder】ABC200をPython3で解説
ABC200の解説。
A - Century
解説
年→世紀を求めるには、年から1を引いて、100で割って、1を足す。
コード
N = int(input())
print((N-1)//100+1)
B - 200th ABC-200
コード1(int
のまま)
N, K = map(int, input().split())
for _ in range(K):
if N % 200 == 0:
N //= 200
else:
N = N * 1000 + 200
print(N)
※int
のまま計算する方法。
N
を1000倍して、200
を足すことで実装。
コード2(str
に置き換える)
N, K = map(int, input().split())
for _ in range(K):
if N % 200 == 0:
N //= 200
else:
N_S = str(N) + '200'
N = int(N_S)
print(N)
※str
で数字を足す方法。
N
をいったん文字列に直して、'200'
を文字列として追加し、また、int
に戻す。
C - Ringo's Favorite Numbers 2
解説
Ai−Ajが200の倍数ということは、AiとAjを200で割ったあまりが等しいということである。
たとえば、Ai=201,Aj=1とすると、
Ai-Aj=201-1=200
Ai÷200=1...1
Aj÷200=1...1
また、Ai=523,Aj=123とすると、
Ai-Aj=523-123=400
Ai÷200=2...123
Aj÷200=0...123
よって、このことが確かめられる。
この問題は、Aの要素を200で割った余りをRとすると、Ri=Rj(i<j)は何通りあるかということになる。
コード
N = int(input())
# 入力を整数値にして、分けてリストに入れる。
A = list(map(int, input().split()))
Rmd = []
def rfn() -> None:
# Aの全要素を200で割った余りをRmdに追加
for x in A:
Rmd.append(x % 200)
# [0, 0, 0,... ,0]と0を200個生成
count = [0] *200
ans = 0
# Rmdの要素を一つずつ検証
for rmd in Rmd:
# ※補足1
ans += count[rmd]
# ※補足2
count[rmd] += 1
return ans
if __name__ == '__main__':
print(rfn())
補足
※1 ans += count[rmd]
だが、リストであるcount
のrmd
番目の値をans
に加える操作。
例えば、count[123]
が1で、ans
が0ならば、最終的なans
は1となる。つまり、1通りの組み合わせがあるということになる。
※2 値を確認した、ということでcount[rmd] += 1
で要素を1つ数える。
Author And Source
この問題について(【AtCoder】ABC200をPython3で解説), 我々は、より多くの情報をここで見つけました https://qiita.com/uniTM/items/df028e4d72c45345df4f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .