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

Atcoderに最近ハマっています。

Atcoderは国内最大の競技プログラミングのオンラインコンテストです。

パズル感覚で問題を解くのと、レーティングが数値で出るのが面白いですね。

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

筆者の学習歴

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

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

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

・利用言語はPython3

・Pythonの利用は業務で少し

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

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

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

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

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

今週学習したこと

今週からABC Problemsで過去問に取り組み始めました。

ABC ProblemsでA、B問題を中心に90問ほど解きました。

A問題はサクサクと進めるので、まずはA問題を全部解ききるように進めます。

abc_problems_256

学習内容

ABC ProblemsでA、B問題を80問(A:65問、B:15問)

 

後は、【Python版】AtCoder を始めた方必見!とりあえず見てください!を参考にツールをいくつか導入しました。

こちらの記事は勉強法や問題が丁寧に記載されていて参考になります。

・AtCoder Easy Test

・AtCoderPerformanceColorizer

次の目標

前回のコンテストで茶色パフォーマンス(631)は出せました。

この調子でパフォーマンスを出せれば、あと4~5回で茶色(400)に昇級できそうです。

茶色への昇級は見えてきたので、目標を更新しました。

目標:緑色パフォーマンス(800以上)を出す

緑色パフォーマンス獲得のため、目標を整理しました。

学習内容

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

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

まずはA・B問題を確実に解けるようにします。

C、D問題については簡単な場合両方、難しい場合はどちらかを解きます。

これで緑色パフォーマンスを取れる可能性があります。

今週のABC

ABCに参加してきました。

abc257

3問AC、茶色パフォーマンスを出せました。

前回よりパフォーマンスは下がりましたが、茶色パフォーマンスは出せました。

abc256

ABC結果

AC:2問

パフォーマンス:501

レーティング:257→280(+23)

段級位:9級

結果

A問題

2^N

Nが与えられる。2^Nを出力せよ。

これは指示通りに出力すれば良いです。

速く解くことを意識し、1分15秒でAC。

n=int(input())
print(2**n)
B問題

Batters

N人のバッターがいて、ヒットの数値が与えられる。(1〜4)

得点の数を出力せよ

最初、状態を記憶して(2、3塁)条件分けして解こうとしていましたがACが通らず苦戦。

しばらく考えるうち、累積和の考え方で良いことに気づきました。

自分の後のバッターのヒットの合計が3を超えているかどうかを考え、超えていればそのバッターは本塁に帰ってこれます。

35分ほどかかりましたがなんとかAC

n=int(input())
a = list(map(int,input().split()))
p=0
t=sum(a)

S = [0]
for i in range(n):
 S.append(S[i] + a[n-1-i])
#print(S)

for i in range(1,n+1):
  if (S[i])//4>=1:
    p+=1
 
print(p)
C問題

Filling 3*3 Array

3*3のマス目がある。

各列の和と各行の和が与えられる。

条件を満たすような9個の数字の書き込み方を出力せよ。

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

素直に全探索すると、TLEするので検索条件を絞る必要があります。

まず左上の2*2マス目をみて、その4マスについて各和がh1とh2、w1とw2未満であるとします。

この場合、3行3列以外は埋めることができるので3行3列が正の値であれば9マス全て埋めることができます。

h1,h2,h3,w1,w2,w3=map(int,input().split())
c=(h1,h2,h3,w1,w2,w3)
d=max(c)

t=0
ans=0

if h1+h2+h3!=w1+w2+w3:
  print(ans)
  exit()

else:
  for i in range(1,d-1):
    for j in range(1,d-1):
      for k in range(1,d-1):
        for l in range(1,d-1):
          if i+j=1: 
  ans+=1 
print(ans)

感想

A,B,C問題をACすることができました。

2ACでパフォーマンスが501だったので、今週は易し目だったようです。

来週学習すること

C、D問題以降も勝負できる様にするため、まずはAtCoder ProblemsでB問題を解いていきます。

その後は、ソートやDPなど分野に絞って学習していきます。

・AtCoder Problems

初中級者が解くべき過去問精選 100 問

コメントを残す

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