1
0

More than 3 years have passed since last update.

【AtCoder】ABC200をPython3で解説

Last updated at Posted at 2021-05-14

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]だが、リストであるcountrmd番目の値をansに加える操作。
例えば、count[123]が1で、ansが0ならば、最終的なansは1となる。つまり、1通りの組み合わせがあるということになる。

※2 値を確認した、ということでcount[rmd] += 1で要素を1つ数える。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0