ゴリラからの逃走

意識が高いだけで何もできなかった頃(=ゴリラ)から変わるために日々行なっていることを書いています。

AtCoder問題の要点一行まとめ(ABC編)

ABC編です。

aoki-shiraki21.hatenablog.com

ABC1

A - 積雪深差

差なので、値の引き算をする

ABC3

A - AtCoder社の給料

1からnまでの合計がわかれば良いので、公式どおり足しあげる

ABC4

A - 流行

2倍なので、掛け算を使う

ABC5

A - おいしいたこ焼きの作り方

足りない部分は作れないので、整数除算を使う

B - おいしいたこ焼きの食べ方

一番0に近い数字なので、最小値を取る

ABC6

A - 世界のFizzBuzz

条件が和集合なので、orで和をとる

B - トリボナッチ数列

漸化式をコードに落としたいので、前の結果をメモしながら値を大きくしていく

ABC7

A - 植木算

素数に対して要素間の個数は1少ないので、引く

B - 辞書式順序

小さい文字を1つ出力すれば良いので、'a'のケースだけ考える。

ABC8

A - アルバム

離散値なので、右端-(左端-1)の-1をつける

ABC9

A - 引越し作業

あまりがあってはいけないので、+1を先にしておく

B - 心配性な富豪、ファミリーレストランに行く。

要素ごとの個数は無視したいので、集合を使って要素を整理する

ABC10

A - ハンドルネーム

末尾に文字列を足すので、文字列の足し算をする

B - 花占い

値によって加算する量が異なるので、条件にあるまでループを回しデクリメントを続ける

ABC11

A - 来月は何月?

12の時だけ動作が違うので、条件分岐を使う

B - 名前の確認

先頭だけ大文字なので、capitalizeをする

ABC12

A - スワップ

数字を同時に複数個入力するので、splitでスペースの分割を行う

B - 入浴時間

単位の大きい方から決まるので、602、60で順に割って時間分秒の順に求める

ABC13

A - A

文字列の順番が知りたいので、ordを使う

B - 錠

どちらにしても増やすのと減らすの2通りなので、両方試す

ABC14

A - けんしょう先生のお菓子配り

あまりがない時だけ別処理なので、条件分岐を使う

ABC15

A - 高橋くんの研修

長さが知りたいので、lenを使う

B - 高橋くんの集計

分母にゼロを含められないので、ゼロのカウントをとり個数からひく

ABC16

A - 12月6日

割り切れるかどうかが知りたいので、あまりが0になるかをチェックする

B - A±B Problem

+-それぞれの整合性チェックが必要なので、条件分岐をネストさせる

ABC17

A - プロコン

同じ処理を何度も行いたいので、繰り返しを使う

ABC19

A - 高橋くんと年齢

要素ごとに扱うと比較が何度も走るので、リストとして扱ってソートする

ABC20

A - クイズ

入力によって処理が変わるので、条件分岐を使う

B - 足し算

連結は文字列としての操作なので、先に文字列として連結した後に整数にもどす

ABC21

A - 足し算

同じ数を何回でも使えるので、1をn回使う

B - 嘘つきの高橋くん

同じところを2回通ったかが知りたいので、配列と集合の差をとる

ABC22

A - Best Body

体重が変化するので、毎回体重を更新して判定をする

ARC23

A - 加算王

桁ごとの和を取りたいので、文字列として扱ってそれぞれ足す

ABC24

A - 動物園

K人を超えているかが論点なので、合計人数で条件分岐させる

B - 自動ドア

毎回ドアの開く時間はリセットされるので、要素ごとに次までの時間との比較をする

ABC25

B - 双子とスイカ割り

方角の情報を持ちたいので、東西をプラスマイナスと対応させる

ABC26

A - 掛け算の最大値

面積が最大になる組み合わせを出力したいので、正方形を考える

ABC27

A - 長方形

1つしかないものを選択したいので、リストとして受け取って要素のカウントをする

ABC28

A - テスト評価

分岐が3つ以上になるので、elifを活用する

B - 文字数カウント

文字列の長さが高々100なので、すべての文字をカウントする

ABC29

A - 複数形

末尾に文字を足したいので、文字列の足し算をする

B - カキ

個別に含まれているかのチェックをしたいので、ループを回す

ABC30

A - 勝率計算

小数は誤差が怖いので、積の形に直して判定をする

ABC31

A - ゲーム

条件が分かれるので、条件分岐を使用する

B - 運動管理

条件が複数になるので、elifを活用する

ABC32

A - 高橋君と青木君の好きな数

どちらでも割り切れる数なので、最小公倍数を最小単位として考える

ABC33

A - 暗証番号

論点が種類数なので、各桁を集合にして扱う

C - 数式の書き換え

足し算ごとに区切って判定をしたいので、+でsplitをかける

ABC34

A - テスト

大小関係が知りたいので、比較を行う

B - ペア

前にいるか後ろにいるかが知りたいので、偶奇の判定をする

ABC35

A - テレビ

比のままだと判定しにくいので、掛け算の形に式変形する

ABC36

A - お茶

足りない状態ではいけないので、切り上げをする

ABC37

A - 饅頭

種類は問わずとにかく量を増やしたいので、価格の安いものを貪欲にとる

ABC38

A - お茶

文字数によらず最後の1文字が知りたいので、添字に-1を使う

B - ディスプレイ

2つの配列の共通要素があるかが知りたいので、積集合を利用する

ABC39

A - 高橋直

同じ面積が2面あるので、それぞれ求めて2倍する

B - エージェント高橋君

4乗してその数になる数が知りたいので、1/4乗をする

ABC40

A - 赤赤赤赤青

前か後ろ2つの選択肢があるので、どちらも計算してminをとる

ABC41

B - 直方体

あまりを出したいので、%を活用する

ABC42

A - 和風いろはちゃんイージー 順番は関係なく個数のみが論点なので、必要な要素をカウントする

B - 文字列大好きいろはちゃんイージー

あえりえる組み合わせが多いので、最も小さいものを固定できないかを考える

ABC43

A - キャンディーとN人の子供イージー

総和なので、整数の総和の公式を書く

B - バイナリハックイージー

末尾に対して操作をするので、スタック的なデータの持ち方、操作をする

ABC44

A - 高橋君とホテルイージ

nがk以上かどうかが論点なので、そこで条件分岐をとる

B - 美しい文字列

全てに当てはまるかが論点なので、1つでも奇数であればfalse扱いにする

ABC45

A - 台形

台形の面積に必要な情報が揃っているので、公式に当てはめて記述する

ABC46

A - AtCoDeerくんとペンキ

種類数だけが知りたいので、集合型を使う

B - AtCoDeerくんとボール色塗り

隣の色によって選べる色が決まるので、最初に端を1つ決めることであとの選択肢は決まると考える

ABC47

A - キャンディーと2人の子供

一番大きいものが他と等しいかということなので、ソートを使って計算する

B - すぬけ君の塗り絵 2 イージー

4パターンあることがややこしさを招くので、上下左右の4つに分けて変数を管理する

ABC48

B - Between a and b ...

a~bの区間だと考えにくいので、~bと~a-1の区間の差を考える

ABC50

A - Addition and Subtraction Easy

文字列の並びを数式として処理したいので、evalで計算する

ABC51

A - Haiku

文字列に対して同じ操作を何度もするので、一度に置換できるメソッドを使用する

ABC52

A - Two Rectangles

大きい方を使うので、maxを使用する

B - Increment Decrement

計算の累積が最大になる点が知りたいので、累積和をとっておいて最大値を取る

ABC53

A - ABC/ARC

大小関係が知りたいので、比較を行う

ABC54

A - One Card Poker

1の時だけは強いので、例外として条件に入れる

ABC55

B - Training Camp

値がすぐ大きくなるのでmodは取れる時に取る

ABC56

A - HonestOrDishonest

答えが2値あるので、片方になる場合だけを考えて残りはそれ以外とする

ABC58

A - ι⊥l

条件が分かれているので、条件分岐を行う

B - ∵∴∵

奇数偶数で長さが異なる可能性があるので、奇数側にダミーの空文字を入れて整える

ABC59

B - Comparison

条件が3つに分岐するので、elifを使う

ABC63

A - Restricted

条件が2つに分岐しているので、条件分岐を使う

ABC65

A - Expired?

条件が3つに分岐するので、elifを活用する

ABC69

A - K-City

線の間の数が知りたいので、本数-1をする

B - i18n

文字列を分解して受け取る必要があるので、アンパックを使用する

ABC70

A - Palindromic Number

数字を桁ごとに処理したいので、文字列として扱う

ABC72

A - Sandglass2

正になる時のみ処理を行うので、max(0,) を使用する

ABC73

B - Theater

席は離散値なので、右端-(左端-1)の-1をつける

ABC74

A - Bichrome Cells

同じ数同士をかけるので、累乗の処理を使う

ABC75

A - One out of Three

選択肢が3つなので、それぞれ同じ値があるかをチェックする

ABC76

A - Rating Goal

問題文の逆の操作が必要なので、求めたいものを変数と見て式を整える

ABC77

B - Around Square

制約の桁数が大きいので、ルートをとって全探索をする

ABC78

A - HEX

文字列の大小関係が知りたいので、数字と同じように比較をする

B - ISU

端と人の個数がずれているとまとめて考えにくいので、先に端1つ分取り除く

ABC79

A - Good Integer

数字を桁ごとに処理したいので、文字列として扱う

ABC82

A - Round Up the Mean

切り上げが必要なので、ceilを使う

B - Two Anagrams

可能かどうかを判定したいので、操作できる最大ケースのソートをする

ABC84

A - New Year

後どれだけかなので、引き算をする

ABC85

B - Kagami Mochi

同じサイズのものは2つ複数使えないので、要素の種類数を求める

C - Otoshidama

O(n3)から1つ次元を落としたいので、変数2つを固定すると残り1つは自明になることを使う

ABC86

B - 1 21

直接的に平方数か判定しにくいので、可能性を全探索する

ABC87

A - Buying Sweets

bの塊を引けるだけ引きたいので、bで割った余りを対応させる

ABC91

B - Two Colors Card Game

種類ごとの要素数の差が知りたいことなので、得する可能性のある種類を全探索する

ABC92

A - Traveling Budget

電車とバスは別の問題なので、個別に独立して処理をする

ABC94

A - Cats and Dogs

具体的な値はわからないので、範囲の最小と最大を考える

ABC96

A - Day of Takahashi

確認した月が含まれるかが論点なので、日が月より小さいか否かで条件分岐させる

ABC97

A - Colorful Transceivers

条件が2パターンあるので、論理和をとる

B - Exponential

値が極端に大きくなることで遅くなるので、探索中に条件を超えたらループを切る

ABC100

A - Happy Birthday!

連続してはいけないので、差が1以下になる状況を考える

ABC103

A - Task Scheduling Problem

途中で折り返して無駄な距離歩きたくないので、ソートして一直線に並べる

ABC104

A - Rated for Me

条件が複数あるので、制約が厳しく先に捕捉される方から分岐させる

ABC105

A - AtCoder Crackers

あまりが出るかどうかが知りたいので、あまりが0かで条件分岐をする

ABC106

A - Garden

縦と横の長さがわかる状態にしたいので、使わない部分を端に寄せる

ABC110

A - Maximize the Formula

大きい桁の値が和への寄与が大きいので、最も大きな位に大きな数を入れる

ABC116

A - Right Triangle

整数で出力する必要があるので、制約から//で除算を行う

ABC119

A - Still TBD

月が4月以前かが知りたいので、スライスで抜き出す

ABC123

B - Five Dishes

整数の繰り上がりを表現したいので、10で割ったあまりで分類して作る

ABC130

A - Rounding

大小関係が論点なので、比較を行う

C - Rectangle Cutting

長方形の面積を半分にしたいので、重心を通るケースを考える

ABC131

A - Security

数字を桁ごとに処理したいので、文字列として扱う

ABC133

C - Remainder Minimization 2019

全探索は難しいので、明らかにmodの結果がゼロになる長さでループを切る

ABC134

A - Dodecagon

同じ数同士を掛けたいので、累乗を使う

B - Golden Apple

できるだけ広く監視させたいので、被りがないように長さを割る

ABC138

B - Resistors in Parallel

式が一瞬ややこしく感じるので、分母部分の処理と分数全体を分けて考える

C - Alchemist

後から処理する数字の影響力が大きいので、小さい順に処理をする

ABC140

A - Password

桁ごとに独立に選ぶので、重複順列を使う

ABC145

A - Circle

何倍かの部分が知りたいだけなので、何倍かを変数において式を立てる

ABC146

B - ROT N

文字列を辞書順で動かしたいので、辞書順の基準になるA~Zまでの文字列を用意する。

ABC149

A - Strings

2つの文字を同時に複数個入力するので、splitで分割する

B - Greedy Takahashi

マイナスにはできないので、できるだけ引いたら0で止める

ABC155

B - Papers, Please

全ての要素が条件を満たすかが知りたいので、条件分岐にallを使用する

ABC157

A - Duplex Printing

足りない状態ではいけないので、切り上げを行う