水色コーダーを目指す取り組みをしてきました。
期間は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に参加してきました。
2問AC、茶色パフォーマンスでした。
C問題を解くことができませんでした。
AC:2問
パフォーマンス:395
レーティング:423→421(-2)
段級位:8級
結果
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)
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')
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問題をどちらかあるいは両方解く
安定して茶色パフォーマンスを出し、できれば緑色パフォーマンスを目指します。