BootCamp Brown(つづき)
前回やったバチャ,BootCamp Brownで残した問題があったのでやりました.
3 - Ice Tea Store
必要な金額を最小化したいので,リットルを買う最適な方法を探します.()
リットルサイズの値段と,リットルサイズつ分の値段を比べます.
もし,がより小さいなら,をで置き換えても差し支えありません.
なぜならこれは同じリットルという量をより安く買うことを意味し,また在庫は無限にあるからです.
また,購入するボトルの個数を聞かれてるわけではないので,をで置き換えたことで購入したボトルがつ分増える,とかは考えなくてOKです.
の順で置き換えていかなければいけないことに注意します.
具体的に1つやってみると,
もしならば,とします.
でも同様の操作をします.
購入する金額は最適化できたので,あとは実際にボトルの容量が大きい物から買えるだけ買っていきます.(省略)
5 - Modulo Summation
これは気づけばとても簡単な問題です.(気づかんけど)
結論から言うと,各について,を全て足したものが答えです.
上手くを選んだとき, mod が最大になるのは,のときです.
言い換えると,と互いに素である以下の整数のうち最大のものです.
これを任意ので考えるとは,の全てと互いに素であり,を超えない整数のうち最大のものを考えればよいです.
つまり, lcm です.(lcmは最小公倍数)
このに対してを計算すると,です.
ちなみに,は求めなくてもいいです.(というかデカすぎてオーバーフロウするかも?)
ABC208
結果
A
B
C
D
2WAの4完で,パフォは1432,rating変動はででした.
考察
A問題
個のサイコロで表せる和の最大はなので,ならば確実にNoです.
ならばYesかというと実はそうではないです(そのせいで2WAした).
個のサイコロで表せる和の最小はなので,ならばNoです.
逆に ならばYesです.
B問題
支払う硬貨の枚数を最小化するので,硬貨はできるだけ高価なものを使いたいです.
よって,と見ていき,ならばとなるまで円硬貨で払い続けます.
ちなみに問題文の枚というのは気にしなくてもよいです.
なので硬貨が足りないこともないし,円硬貨が枚あるとを超えますが,既に硬貨未満まで支払いをしているためです.
C問題
ならば,とりあえず全員に個ずつお菓子を配っておき,お菓子の個数をで更新します.
(は切り捨て除算,は剰余演算)
次に,番目という情報を持ったまま国民番号についてソートします.(私はpairで実装しました.)
あとは国民番号が小さい方から人分だけ,持っておいた番目という情報によってお菓子をつ増やします.
D問題
Warshall Floydです.
Warshall Floyd法では,経由してもよい頂点が以下であるという制約で最短経路を更新していきます.
よって,最短経路を持つ隣接行列をの更新ごとに毎回見て,INFでないものは全て答えに加算していきます.(は足してもなので足しとけばOK.)
感想
A問題で2WAしたときはどうしようかと思いましたが,D問題で大挽回しました.
最短経路は何回か書いたことがあったので,Warshall Floyd法の性質を覚えていたおかげで爆速でDを解けました.
BootCamp Bworn
BootCamp Bworn
Boot Campの茶色の問題5問でバチャを組みました.
https://kenkoooo.com/atcoder/#/contest/show/29f4c347-76f8-4cb5-9e17-9501452d0282
考察
1 - 文字列大好きいろはちゃんイージー
先頭の文字列に着目して個の文字列をソートし,先頭の文字が若い順に出力します.
先頭の文字が同じならば2文字目を見,2文字目も同じなら3文字目を見る,という基準でソートします.
2 - AtCoder Group Contest
個の整数をソートし,小さいほうから数えて番目の数値のみを加算したものが答えです.
まず,強さが一番小さい方から人を選び,個のグループに振り分けます.
できれば一番強さが大きい人の強さをチームの強さにしたいですが,明らかにそれは不可能なので適当なチームに入れておきます.
次に二番目に強さが大きい人ですが,先ほどのチームに入れることで二番目に強さが大きい人の強さをチームの強さとすることができます.
このようにして強さが大きい人から順にチームを決めることでチームの強さの和を最大化できます.
3 - Ice Tea Store
時間内にできなかったのでまた今度.
4 - To Infinity
1以外が出てきたら,5000兆日後には必ずの値より多い数に変化しています.1の場合は5000兆日後にも変化していません.
よって,まずは左から数えて初めて1でない数字が出てくる場所,leftを探します.
leftが番目よりも大きければ,5000兆日後の番目は1です.
leftが番目以下であれば,5000兆日後の番目はleft番目の数字です.
5 - Modulo Summation
時間内にできなかったのでまた今度.
感想
一回はやったことあるから早く終わると思ってたけど意外と時間かかりますね.
4問1時間でもいいかも?
ABC206
結果
A
B
C
ノーペナ完で,パフォは,rating変動はででした.
考察
A問題
通常の整数型の変数でを計算して場合分けをします.
B問題
を初期値とし,変数sumにと足し込んでいきます.
それがを超えたらを出力すればOKです.
C問題
全体から,となるようなの組の数を引きます.
それぞれの数字が何回出てくるかを数えておいて,からその数値までの和を数えていく,というのを足していったものを全体から引けばよいです.
例えば入力例3では,は回出てきます.ということは,だけで見るととなるのは通りあります.
一般的には,ある数値が回出てくるならば,となるの数は,通りです.
これを他の数値でも見ていけばOKです.
ちなみに,の選び方の総数はではなくて,であることに注意しないとだめです.
感想
C問題で沼りました.
同じ数字が回出てくるなら,になるのは通りやろ!とかやってたので無限に時間が溶けました.
激冷えではないのでヨシ!(前回の上昇分が消えた)
gray-brown
gray-brown
灰色3問,茶色3問でバチャをしました.
https://kenkoooo.com/atcoder/#/contest/show/922d4620-1d56-405f-9cff-e4c0d4dc3d7e
考察
1 - i18n
先頭の文字,文字列の長さ,末尾の文字
を出力します.
2 - Indeedなう!
文字列について,登場するアルファベットの数を数えます.
それが"indeednow"と一致すればYES,1つでも一致しないもしくは過剰な文字があればNOを出力します.
mapとかでやると楽です.
3 - 2点間距離の最大値 ( The longest distance )
全探索して最大の距離のものを探します.
比較するときは平方根を取る必要はなくて,答えの出力の時だけでOKです.
4 - Count Order
next_permutationで頑張ります.
一致したら辞書順で何番目かを保持しておきます.
一致するかどうかの判定は線型的に調べるしかないですが,の最大はなので間に合います.
5 - Remainder Minimization 2019
がより大きい場合,同じ計算を繰り返すだけなのでとしてとの間のを全探索します.
がより小さい場合,普通に全探索します.
6 - RGB Triplets
時間足りませんでしたねー.
恐らく,例えばRとGの位置を全探索して,条件を満たすBの位置がどこかをで出すかんじだと思います.
累積和とかでいけそうな気がします.
感想
初のバチャ記事!
6の問題はコンテスト中に解いたことあるのに今日は解けませんでした.
コンテスト中の集中力ってすごいね.
Even Relation
ABC126-D "Even Relation"
提出コード atcoder.jp
考察
DFSをします,以上.
というのは嘘で,例えば初期値は全頂点で塗り,DFSで木を舐めながら距離を逐次計算,距離が奇数であればその頂点はで塗り替える.
という操作を実装すればOKです.
ちなみに,始めの頂点はどこでも一般性を保つので,僕は頂点から始めています.
BFSだと距離の管理が面倒そうなので,再帰で書くのが一番楽です.
特に書くこともないシンプルな問題なのでこれぐらいでいいですか()
感想
久しぶりにグラフ探索をしました.
かなりシンプルなDFSで,思い出すのに良い問題でした.
シンプルなBFSも解きたいな~
Colorful Hats 2
三井住友信託銀行2019 "Colorful Hats 2"
提出コード
考察
色の種類を一般的に,X,Y,Zと表します.これらは帽子の赤,青,緑のいずれかです.
まずは,が回来ることはないです.
ということは,前に自分と同じ色の帽子をかぶった人がいないということです.
帽子の色は種類なので,と言った人が人いる時点で答えはです.
言い換えると,となってもよい回数をrestとすると,を見つけるごとにrestを減らし,restで答えをとすればよいです.
人の前に人と同じ色の帽子をかぶった人がいないとき,人の帽子の色の選び方はrestだけ 分岐するのでかけ算ですね.
の値を見ながら,色X,Y,Zのうちどの色の帽子をかぶるかをカウントしていきます.ただし,帽子の色の選び方が複数あるときはアルファベットが若いほうを選ぶとします.(計算上はそれで問題ない)
例として,のようなものを考えます.以下では,色X,Y,Zの帽子をかぶった人数をのように表すとします.
なので,帽子の色の選び方は通りで色Xを選びます.このとき,です.
なので,色Xを選びます.このとき,です.
なので,帽子の色の選び方は通り(YかZのどちらか )で色Yを選びます.このとき,です.
なので,色Yを選びます.このとき,です.
なので,帽子の色の選び方は通り(XかYのどちらか)で色Xを選びます.このとき,です.
このように考えていくと,で答えが出ます.
感想
場合の数の問題でした.
正直こういう問題は苦手なので克服しないとですねー
週一で精進したいけど意外と時間がないです...