競技プログラミング初心者が6ヶ月で水色コーダー目指す学習記【AtCoder-1週目】

Atcoderでもっと多くの問題を解きたい!と言うことで学習していきます。

期間は6ヶ月とし、水色コーダーを目指します。

筆者の学習歴

学習歴はこんな感じです。

まだまだ入門と言う感じですね。

筆者の競技プログラミング歴

・利用言語はPython3

・Pythonの利用は業務で少し

・学習は「みんなのPython」を読んだくらい

・ABCコンテストには数回参加した(解けるのは1〜2問)

競プロではC++を使う方が多いかと思いますが、筆者はPythonのシンプルさに感動したためPythonで取り組みます。

今日が2022年3月20日(日)なので、9月20日までの半年の期間で学習を進めます。

毎週のAtCoder Beginner Contest(ABC)をペースメーカーにしていきます。

今週学習したこと

今日3月20日(日)に思い立ち学習を進めています。

ABCに向け、標準入出力の復習をしていました。

(標準入出力ができないと問題が解けないので。。)

今週のABC

ABCに参加してきました。

ABC244

 

結果はこんな感じでした。

abc244

ABC結果

AC:3問

パフォーマンス:227

レーティング:62→77

段級位:12級

結果

A問題

英小文字からなる長さNの文字列Sが与えられる。

Sの末尾の文字を出力せよ。

これは簡単ですね。

このように提出してACしました。

n=int(input())
s=input()
print(s[n-1])
B問題

xy平面を考える。高橋君ははじめ、点 (x,y)=(0,0)にいてx軸の正の向きを向いている。

S  R のみからなる長さNの文字列が与えられ、 高橋くんはi=1,2,…,Nの順に以下を行う。

S ならその場に右回りに90度回転し、 R なら向いている方向に1進む。

最後に高橋くんがいる位置を出力せよ。

高橋くんが向いている方向をmod4で管理することに気づけば簡単です。

N<=10⁵なので、普通にループで処理しました。

ここまで25分くらいで解けたので順調だと感じていました。

n=int(input())
s=input()

x=0
y=0
rcnt=0

for i in range (n):
    if s[i] == 'R':
        rcnt += 1
    #if s[i] == 's':
    else:
        if rcnt % 4 == 0:
            x += 1
        elif rcnt % 4 == 1:
            y -= 1
        elif rcnt % 4 == 2:
            x -= 1
        else:
            y += 1
            
print(str(x)+" "+str(y))
C問題

高橋君と青木君は 2 人で次の対戦ゲームをします。

高橋君が先手でゲームを始め、ゲームが終了するまでの間、 2 人は交互に 1 以上 2N+1 以下の整数を 1 つずつ宣言します。 

どちらかが一度でも宣言した整数は、それ以降どちらも二度と宣言することが出来ません。

 先に整数を宣言することが出来なくなった方のプレイヤーの負けとなり、負けなかった方のプレイヤーの勝ちとなります。

このゲームでは必ず高橋君が勝ちます。 

高橋君の立場で実際にゲームを行い、ゲームに勝ってください。

インタラクティブな問題です。

ググりつつ、40分ほどかけてなんとかAC。

標準出力のFlushがカギですね。

n=int(input())
lst = list(range(1,2*n+2))
#print(lst)

l=1
while l != 0:
    print(l, flush=True)
    lst.remove(l)
    #print(lst)
    
    s = int(input())
    if s == 0:
        #print('end')
        break
    else:
        lst.remove(s)
    
    l = lst[0]
    #print(lst)

感想

3問解くことができたのはなかなか自信になりました。

4問目も、偶奇性に気づくところまでは行ったのでACまで行きたかったですね。

来週学習すること

ABCの5問目以降はグラフの問題で、グラフの実装方法やアルゴリズムが分かっていないと手も足も出ない感じでした。

来週に向けて、グラフの学習をしたほうが良さそう。