早稲田卒のAI研究者のブログ

データサイエンス、機械学習、競技プログラミング、音楽、勉強

AtCoder Beginner Contest 143に参加しました

atcoder.jp



題名の通り、AtCoder Beginner Contest 143に参加したのでその記録を残させてください。

はじめに

今現在Atcoder上での僕のレートは茶色です。
僕のレベル感としては、6問問題のABCにおいて、D問題が解けるか解けないか、程度です。

今回のABCでは、A, B, C問題の3完でした。。
下振れでかなり悔しいです。

ABC143の難易度

今回の正答率データは
A問題:99%
B問題:99%
C問題:98%
D問題:64%
E問題:45%
F問題:23%
でした。

C問題がどんどん簡単になっている気がしますね。
4問問題だった以前のABCのC問題が今現在のABCのD問題くらいのレベル感でしょう。

となると緑になるためには、4完が必要そうですね。
うーん、心が折れます。



各問題における僕の解答

A問題

atcoder.jp


A問題はやはり単純ですね。
Bの2倍がAより大きいかで場合分けをして、差を計算するだけです。
以下僕の実装。

A, B = map(int, input().split())

if 2*B - A > 0:
    print(0)
else:
    print(A - 2*B)

B問題

atcoder.jp

題名かなり好きです。
たこやきフェスティバルの季節とは?!?!

これまた簡単で
2重のfor文で、全通り計算するだけです。

以下僕の実装

N = int(input())
d_list = list(map(int, input().split()))

ans = 0
for i in range(N):
    for j in range(i+1, N):
        ans += d_list[i] * d_list[j]

print(ans)

C問題

atcoder.jp

atcoder、スライムが題材の問題多いですよね。
出題者がドラクエ好きなんでしょうか?

これまた、正直簡単です。
C問題とは思えないです。
文の最初から探索していき、異なる文字を見つけたらカウントを増やしていくだけです。

N = int(input())
S = list(input())
ans = 1
for i in range(1, N):
    if S[i-1] != S[i]:
        ans += 1

print(ans)

D問題

3重のfor文の解答しか浮かびませんでした。

解答を見たら二分探索とのこと。
二分探索のアルゴリズム、学んだことないんですよね。。
これを機に、しっかり勉強します。。

D問題の傾向として、基本的なアルゴリズムがわかっているかが大事そうですね。
Dが解けなかった皆さん、一緒にアルゴリズムを勉強していきましょう。

最後に

かなり悔しい。
次は4完目指して、日々無理せず勉強に取り組んでいきます。