【AtCoder23週目】競プロ初心者が6ヶ月で水色コーダー目指す学習記

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

C・D問題攻略のためアルゴリズム別学習を進めます。

今週学習したこと

アルゴリズムの分野別学習を進めました。

学習内容

・全探索の問題を10問

・「Pythonプロフェッショナル大全」を学習

さらに@e869120さんの記事で分野別学習を始めました。

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

基本アルゴリズム12個を学ぶと良いようです。

各記事ボリュームがありますが、まずは12個基本を押さえます。

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

問題を素直に実装すれば解ける問題(全探索)をコンテストで解けていないように感じたので、全探索の練習をしました。

レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【初級編:競プロを始めよう】の「全探索の問題」を解きました。

筆者の学習歴

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

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

・利用言語はPython3

・Pythonの利用は業務で少し

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

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

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

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

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

今週のコンテスト

ABC265

ABCに参加してきました。

ABC266

abc266

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

A、B、C問題を解き切りました。

ARC結果

AC:1問

パフォーマンス:539

レーティング:392→408(+16)

段級位:9級

まだまた初心者ですが、茶色コーダーになれたのは達成感がありました!

結果

A問題

Middle Letter

与えられた文字列の真ん中の文字を出力せよ

1分30秒でACしました。

S=list(input())
n=len(S)
a=n//2
print(S[a])
B問題

Modulo Number

整数Nが与えられる。

N-xが998245343の倍数になるようなxを求めよ。

なお、xは0以上998245343の整数である。

14分30秒(トータル16分)でACしました。

998243534という数が大きいので、全探索するとTLEすることが想像できました。

方法を考えていて、最初にNを998245343で割った余りを出せば良いことに気づきました。

N=int(input())
K=998244353

a=N%K
print(a)
C問題

Convex Quadrilateral

四角形の座標4点が与えられる。

与えられた四角形が凸四角形かどうかを判定せよ

99分30秒(トータル85分)でACしました。

xy = [map(int, input().split()) for _ in range(4)]
x, y = [list(i) for i in zip(*xy)]

a=[x[0],y[0]]
c=[x[1],y[1]]
b=[x[2],y[2]]
d=[x[3],y[3]]

r=(d[1]-c[1])*(c[0]-a[0])-(d[0]-c[0])*(c[1]-a[1])
s=(b[1]-a[1])*(c[0]-a[0])-(b[0]-a[0])*(c[1]-a[1])
t=(b[0]-a[0])*(d[1]-c[1])-(b[1]-a[1])*(d[0]-c[0])

if t==0:
  print('No')
  exit()
  
else:
  x=r/t
  y=s/t

if 0 < x and x <= 1 and 0 < y and y <= 1:
      print('Yes')
      exit()
    
  else:
    print('No')

残り時間はこの問題に取り組みました。

四角形なので対角線が2本できますが、その対角線が交差すれば凸四角形、交差しなければ凸四角形ではないです。

2つの対角線はベクトルとして出し、交差する条件は検索して調べました。

2線分の交差の条件

次の目標

今回のコンテストは、ABCが茶色パフォーマンス(539)でした。

成長を感じる結果でよかったです。

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

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

学習内容

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

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

念願の茶色昇級ができたので、次は緑色パフォーマンスを目指します。

コメントを残す

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