AtCoder 復習 1

【ABC240】

参考:【解説 実況】ABC240 AからD【かつっぱ】 - YouTube

A,B は簡単すぎるので飛ばします。

 

C - Jumping Takahashi ACコード

ジャンプ問題。真偽値を持つ DP で解ける。

 

D - Strange Balls ACコード

スタックを用いる。整数の個数を扱う際に [整数, 個数] と配列で管理する方法が賢すぎた。

pop() とかも忘れないようにしたい。(deque とかも似た操作だよね)

 

 

 

【ABC237】

C - kasaka ACコード

先頭に a を入れたり入れなかったりして文字列 S が回文なれば Yes

コーナーケース (only a) も考慮する必要があって実装がちょっと面倒。

 

D - LR insertion ACコード

おしりから考えるタイプの問題。文字追加を沢山行うため、リストを用いるよりかは deque を使うのがよい。

 

 

【ABC204】

C - Tour ACコード

BFS練習

 

D - Cooking ACコード

DP練習。部分和?というらしい。ガバガバコードでも通った。

 

 

 

【ABC195】

B - Many Oranges ACコード

B 問題だがやや難しい。

N 個みかんを選んだときに条件を満たすかどうかを全探索で調べていく。

while 文を使うと全探索がらくにできる。

 

C - Comma ACコード

解法はすぐ浮かぶが、実装を丁寧に行う必要がある。かも。

 

 

 

【ABC192】

B - uNrEaDaBlE sTrInG ACコード

リストのおべんきょうが深まってるとらく。isupper とか islower を初めて知った。

 

C - Kaprekar Number ACコード

def で無双しよう!

 

D問題は二分探索っぽいですが、実装が大変そうなので解きませんでした。水色diffだし無理して解く必要はないかなーと。

 

 

 

【ABC190】

C - Bowls and Dishes ACコード

bit全探索!Cのbit全探索にしては実装がやや大変?

 

D - Staircase Sequences ACコード

数学問題の中の整数問題。抽象的な等差数列を具体的に考えていく必要がある!

整数問題は (整数)×(整数)=整数 の形に持ち込めると強い。

 

 

 

【ABC178】

C - Ubiquity ACコード

数学力が要求される。包除原理を知ってるかどうか。

あと pow の使い方を知ってるかどうか。

 

D - Redistribution ACコード

DP問題。小さい順に実験していくと、過去の結果を利用できる。というわけでDPを実行。

 

 

 

【ABC131】

C - Anti-Division ACコード

包除原理

 

D - Megalomania ACコード

恐らく貪欲法

 

 

 

単品

 

C - Travel ACコード

itertools 練習

 

C - IPFL ACコード

クエリによる文字列操作の典型問題に慣れよう。

 

C - Compass Walking ACコード

数学問題?なのかよくわからん

 

C - Mandarin Orange ACコード

2重ループで解けるが、どう実装するか問題

 

C - Unexpressed ACコード

余事象を考えるタイプ

 

C - To 3 ACコード(きれいじゃない)

消すのは 0,1,2 個のいずれかになる。if 文のゴリ押しで解ける。が、きれいじゃない。

 

C - Collinearity ACコード

数学問題。N 個の点から 3 点選び、それが同一直線状に存在するかどうかを調べよ、というもの。

 

C - Sum of product of pairs ACコード(新) ACコード(旧)

数学問題?ΣΣAiAj を求める問題。ACコードが 2 つあるが、やっていることは同じ。

因みに解説は社長が行ったみたいです。

 

C - Step ACコード

for 文と配列の超基本問題。B問題でもいい。

 

C - Walking Takahashi ACコード

数学問題。座標 0 に到達できるかどうかを考えてから方針を分岐する。

越えられないならその座標を、越えられるのなら偶奇で分けて出力する。

 

C - H and V ACコード

bit全探索。だがちょっと難しい。二次元配列で考えるbit全探索なので、今まで一次元しか扱っていない人だと少し躓くかも。

基本的には考えられる全探索を行い、その各々のループについて全てのマスを全探索で調べればよい。

したがって、一次元は

 

for文(bit全探索開始!) → for文(条件を満たすか全探索開始!)

 

の二重だったが、本問は二次元配列なので

 

 for文(についてbit全探索開始!) → for文(についてbit全探索開始!) → for文(について条件を満たすか全探索開始!) → for文(について条件を満たすか全探索開始!)

 

という四重ループを実装する必要がある。

 

C - Multiplication 3 ACコード

実装力が要求される、気がする。小数点以下をどう処理するかが難しい。そこで replace() を使うという変態的発想で解ける。

 

C - Skill Up ACコード

bit全探索の超基本!やったことない人は本問を使うとよい。

 

D - I hate Factorization ACコード

A⁵-B⁵=X を満たす A,B∈ℤ をひとつでも求めればよい!

数学問題に見せかけて全探索で解ける、実装力要求タイプである。

 

D - String Formation ACコード

クエリによる文字列操作に慣れよう!文字を追加する操作があるので、配列よりも deque を用いる方がよい。

 

D - Dice in Line ACコード

数学問題?サイコロの期待値を求め、累積和を求める問題。慣れておきたい。

 

D - Caracal vs Monster ACコード

分裂した敵にも同じ行動を繰り返すので 2 倍して +1 する必要がある!

難易度は低いが、考察力が要求される。

 

C - Snack ACコード

最小公倍数 LCM を求める問題。

 

D - Triangles ACコード

長さが与えられて三角形ができる個数を求める問題。

bisect を使うとよい。

 

D - Powerful Discount Tickets ACコード

heapq を使う。

 

D - Ki ACコード

BFS練習

 

C - Switches ACコード

bit全探索。やや難しいかも。

 

 

 

 

 

 

今まで解いた問題を列挙しただけで満足してしまった。定期的に復習しつつ、DPの理解度を深めつつ、様々なアルゴリズムを習得したい。

ACコードの殆どがきたなかったり、余計な部分を迂回していたり、簡略化できる部分もあると思いますが、温かい目で見守ってください()