読書AWSに関する本で2冊目に読みました。全体的にAWSの概要をサクッと知るのに良い本だと思います。書かれていることAWSにおける基本的な機能である、VPC、サブネット、ルートテーブル、EC2、NATなどの知識が一通り学べます。内容は章ごとに分かれていて、EC2、VPC、Route53、S3、CloudFront、RDS、ELB、AutoScaling、CloudWatch、Billingからなります。各章は機能の概要とGUIでの操作手順、CLIでの操作手順について一通り説明されています。発行されたのが2015年なので所々情報が古いところがあるので、その点は注意する必要があります。(例:RDSは起動と削除しか出来ず停止が出来ない、など)特にCLIなんかは結構仕様が変わりやすいので、正確な情報は公式のリファレンスを見た方がよいですね。自分はCLIの部分はほぼ読み飛ばしてしまいました。書かれていないことインフラの知識がある程度あることが前提になっているので、サブネットって何?とかDNSってどういう仕組みになってるの?みたいなことは説明されません。実際の利用を前提とした設計パターンのようなものもあまり触れられていないので、そういったことを知りたい人は別の書籍をあたるほうがよいです。まとめAWSの全体像をさくっと知りたい、という人にはよくまとまっていていい本だと思います。出来れば最新の情報にアップデートした版も出して欲しいところですね。クラウドの世界は進歩が早いから最新の情報を知るには公式を当たるほうが手っ取り早いですが、そのための基礎知識をつける意味でもいい本だと思いました。online.atcoder.jp解法1円玉には制限があり、500円玉は無制限。500円玉で払える分は最大限支払い、残りを持っている1円で払えるかを判断すればよいです。よって、Nを500で割った余りが1円の所持枚数A以下であればYes、そうでなければNoとなります。online.atcoder.jp解法AliceとBobは交互にカードを選ぶそれぞれ自分の得点を最大化するように最適な戦略を取るということは、AliceもBobも残っているカードのうち大きい数字からとっていくことになります。よって、カードを降順にソートすれば、(0インデックスで)偶数番目をAlice、奇数番目をBobが選ぶことになります。Bobの点数なので、解としては偶数番目は加算、奇数番目は減算すればよいです。online.atcoder.jp解法300点にしてはちょっと難しかったです。cとa、bの関係を表すと以下のようになります。(a1,a2,a3,b1,b2,b3)が存在すると仮定すると、aにxを足したものとbからxを引いたものも、つまり、(a1+x,a2+x,a3+x,b1-x,b2-x,b3-x)も条件を満たすことがわかります。(上の式に当てはめてみるとわかります)よって、xを調整すれば、a1が0のパターンもあり得ることになります。よって、a1を0としたときの残りのを求めることができます。求まった数について、求めるのに使った式以外の式を満たすかどうか判定し、矛盾すればNo、問題無ければYesとなります。迷路の探索問題の応用でとけます。最初に(1,1)から(H,W)までの最短経路を深さ優先探索などで解きます。最短経路のマス数)を求めれば良いです。実装のポイントとして、マスの境界値の判断ロジックをシンプルにするために、事前に外枠を黒マスで囲んでおきます。\rfloor\)になる。4種類」なので、黄色(Y)が1つでもあれば4種類、そうでなければ3種類となる。組み合わせの条件は以下の2つです。どれかから始まっている同じ文字から始まる名前を持つ人が複数いない1つ目の条件より、入力のうちM,A,R,C,Hで始まらないものは無視して良いことがわかります。2つ目の条件より、3人の組み合わせとして有効なのは、(Mで始まる人、Aで始まる人、Rで始まる人)(Mで始まる人、Aで始まる人、Cで始まる人):のような組み合わせになります。Rで始まる人の人数で求めることが出来ます。よって、最初に以下の5つの数を計算しておき、そこから3つを取り出した時の組み合わせ毎にその積をとって、その総和を出せば解になります。実装rubyで組み合わせを求める場合、配列のcombinationを使うと簡単です。online.atcoder.jp解法LからRへDずつ移動した際の距離の総和を求める問題です。L、Rは最大9万なので、距離を求めるのが1回であれば、Dずつ移動しながら移動距離の総和を出せば良いです。与えられるL、Rの組み合わせの数Qは最大105なので、都度Dずつ移動しながら距離を計算するのは時間がかかりすぎます。よって、L、Rが与えられた時に定数時間で移動距離を出す方法を考える必要があります。考え方のポイントとしては、Dは常に一定である、という点です。入力例1のように、Aが1〜9でDが2である場合、移動パターンは以下の2種類しかありません。8よって、奇数の場合は1からの累積距離、偶数の場合は2からの累積距離、を事前に求めておくことで、任意の点間の移動距離を定数時間で求めることが出来ます。計算すれば、4から8への移動距離を求めることが出来ます。