【AtCoder28週目】競プロ初心者が6ヶ月で水色コーダー目指す学習記(延長戦)

水色コーダーを目指す取り組みをしてきました。

期間は2022年3月から、9月20日までの半年としてきました。

結果は407(茶色)で終わりました。

悔しいので、3ヶ月の延長戦を設定して続けることにしました。

学習の方針

e869120さんの記事を参考に学習の方針を立てます。

レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】

上の記事によると、水色コーダー(レーティング1200)の条件はこんな感じのようです。

AtCoder で水色コーダー、つまりレーティング 1200 に到達するには、

  • AtCoder Beginner Contest で確率 8 割以上で 4 問正解できる
  • AtCoder Beginner Contest で確率 3-4 割で 5 問正解できる
  • AtCoder Beginner Contest の問題をある程度早く解くことができる
    • 目安は、A 問題 1 分、B 問題 4 分、C 問題 10 分、D 問題 25 分

A~D問題を50分以内目安で解くことが必要とのことです。

B問題4分、C問題10分が次の壁となりそうです。

今週学習したこと

アルゴリズム学習

レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】

基本アルゴリズム12個を学習します。。

一通り学習したアルゴリズムは灰色、今週学習したものを太字にしています。

全探索 二分探索 深さ優先探索 (DFS) 幅優先探索 (BFS)
動的計画法 (DP) ダイクストラ法 ワーシャルフロイド法 クラスカル法
高速な素数判定法 べき乗を高速に計算する手法 逆元を計算する手法 累積和

今週は、安全情報確保支援士の学習卯をしていて、競プロの学習ができませんでした..

データ構造学習

データ構造3つを学習します。

一通り学習した構造は灰色、今週学習したものを太字にしています。

グラフ Union-Find

筆者の学習歴

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

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

・利用言語はPython3

・Pythonの利用は業務で少し

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

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

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

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

今週のコンテスト

ABC270

ABCに参加してきました。

ABC271

abc-271

2問AC、茶色パフォーマンスでした。

C問題を解くことができませんでした。

ABC結果

AC:2問

パフォーマンス:395

レーティング:423→421(-2)

段級位:8級

結果

A問題

484558

与えられる整数Nを2桁の16進数で出力せよ

7分28秒時点(所要時間7分28秒)でACしました。

16進数への変換、2桁での出力は調べながら提出しました。

a=int(input())
#b=0o(a)
b=format(a, 'x')
b=b.upper()

if len(b)==1:
  print("0"+b)
else:
  print(b)
B問題

Maintain Multiple Sequences

整数からなる数列N個が与えられる

Q個のクエリが与えられる時、s番目の数列のt項目を出力せよ

26分48秒時点(所要時間19分20秒)でACしました。

数列の処理方法に苦労しました。

from collections import defaultdict

# 入力を受け取る
n,q = tuple(map(int, input().split()))
#a = list(map(int, input().split()))
a = [ tuple(map(int, input().split())) for _ in range(n)]
xk = [ tuple(map(int, input().split())) for _ in range(q)]

# 答えを格納する配列
ans = []
for x,k in xk:
    ans.append(a[x-1][k])  # python は 0-indexed なので、k から 1 を引く

# 答えを出力
print(*ans, sep='\n')
C問題

Manga

高橋くんが漫画を読む

不要な2冊を使って任意の1巻を取得できる

1巻から読み始めて、何巻まで読むことができるか

ACできませんでした。

こちらもクエリで解く方針かと思いましたが、処理がうまくいかず..

from collections import deque
import heapq
N = int(input())
a = list(map(int,input().split()))
a.sort()

if len(a)==1:
  if a==1:
    print('1')
    exit()
  else:
    print('0')
    exit()
  
if a[0]!=1:
   a.insert(0, 1)
   del a[-1] 
   del a[-1] 
   
cnt=1

for i in range(N-1):
    if i>len(a)-2:
        #print(a)
        break
    elif a[i+1]==a[i]+1:
        cnt+=1
        continue
    elif i<len(a)-2:
        a.insert(i+1, a[i]+1)
        del a[-1] 
        del a[-1] 
        cnt+=1
        #print(a)
#print(a)
print(cnt)

次の目標

目標:緑色パフォーマンスを出せるようにする

緑色昇級のため、目標を整理しました。

学習内容

・A・B問題を高速で解く(理想5〜10分以内)

・C・D問題をどちらかあるいは両方解く

安定して茶色パフォーマンスを出し、できれば緑色パフォーマンスを目指します。

abc271-score

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です