考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC140-B - Buffet を解く

ABC140-B - Buffet 問題文を理解するのが難しい… サンプルにも説明があるので参考にしよう i 番目の料理を食べると満足度 Bi を得ることができるのだが i 番目の料理、i + 1 番目の料理、の順で食べた場合は追加で満足度 Ci も得ることが できるという問題 2…

ABC139-B - Power Socket を解く

ABC139-B - Power Socket 1 口しかない電源プラグに A 口のタップを差していき B 口以上にする 最小でいくつのタップが必要か(タコ足配線…) とりあえずシミュレーションで1つずつ増やしていき 初めて B 口を超えた時のタップの数を出力すればいい 差し方に…

ABC138-B - Resistors in Parallel を解く

ABC138-B - Resistors in Parallel A1, A2, ... , An の逆数の総和の逆数を求める問題 逆数は 3 に対する 1/3 のような数のことだ まずは画数の逆数を求め、それらの和を取り、最後にまたその逆数を取ればいい 難しそうな式が書いてあるが、式変形を考えるよ…

ABC137-B - One Clue を解く

ABC137-B - One Clue 数直線上に 2000001 個の石が置かれている 石の座標は -1000000, -999999, -999998, ... , 999999, 1000000 である これらの石の内、連続する K 個が黒で塗られており それ以外は白で塗られている 座標 X が黒であることがわかっている…

ABC136-B - Uneven Numbers を解く

ABC136-B - Uneven Numbers N 以下の正の整数について、桁数が奇数になる数字の個数を数える問題 制約が 1 <= N <= 10^5 とそれほど大きくないので 1つ1つについて条件を満たすかどうかをチェックしてその個数を数えていけばいい 数字の桁数を取得する場合は…

ABC135-B - 0 or 1 Swap を解く

ABC135-B - 0 or 1 Swap 数列 { p1, p2, ... , pn } が与えられる 一度だけ、 pi, pj を入れ替えることができる(入れ替えなくてもいい)とき 数列を昇順に並べることが可能かどうかを調べる問題 まずは昇順に並べた場合の数列を作ってみて 与えられた数列と…

ABC134-B - Golden Apple を解く

ABC134-B - Golden Apple N 本の木があり、1 から N まで番号が振られている これらの木に対し監視員を配置する 1 人の 監視員は番号 i の木のに配置させたとき 番号 i - D 以上 i + D 以下のすべての木を監視することができる 全ての木を監視するためには最…

ABC133-B - Good Distance を解く

ABC133-B - Good Distance D次元空間上に N個の点がある i 番目の点と j 番目の点の距離が整数となるような組み合わせは いくつあるかを求める( i < j ) 2点間の距離を求める公式は与えられているのでそれを利用する N の制約は 2 <= N <= 10 とかなり小さ…

ABC132-B - Ordinary Number を解く

ABC132-B - Ordinary Number { 1 , 2 , ... , n } の順列 { p1 , p2 , ... , pn } がある pi - 1 , pi , pi + 1( 1 < i < n ) の 3 つの数の中で pi が 2 番目に小さくなるような pi はいくつ存在するかを求める 端から順番に 3 つずつ見ていき 条件を満た…

ABC131-B - Bite Eating を解く

ABC131-B - Bite Eating N 個のリンゴがあり、リンゴ i の「味」は L + i - 1 で定義される このリンゴを材料として作ったアップルパイの味はリンゴの味の総和になる ここで、N 個のリンゴから 1 つリンゴを取り除き N - 1 個のリンゴでアップルパイを作る N…

ABC130-B - Bounding を解く

ABC130-B - Bounding 数直線を N + 1 回ボールが以下のように跳ねる ・1回目は 座標 D1 = 0 でボールが跳ねる ・i 回目は 座標 Di = Di-1 + Li-1(2 <= i <= N + 1)で跳ねる 座標 X 以下で跳ねる回数は何回かを求める カウンタを用意し、与えられた漸化式を…

ABC129-B - Balance を解く

ABC129-B - Balance 1 から N の番号がついた N 個の重りがある 番号が T 以下の重りのグループ と 番号が T より大きい重りのグループ の2グループに分ける(1 <= T < N) それぞれのグループの重りの和の S1, S2 としたとき S1, S2 の差の絶対値の最小値を…

ABC128-B - Guidebook を解く

ABC128-B - Guidebook N個のレストランについての情報が与えられる(市の名前、得点) 市の名前の辞書順に紹介が行われる 市の名前が同じ場合は、得点が大きい方が優先される 紹介される順に番号を出力する問題 まずは言われている通り、辞書順でソートする…

ABC127-B - Algae を解く

ABC127-B - Algae 漸化式 xi+1 = rxi - D が存在する r, D, x2000 が与えられるので x2001 ... x2010 を計算し、出力する問題 漸化式と聞くと身構える人もいるかもしれないが 前の計算結果を次の計算結果で使用するというだけの話だ 与えられた式に適切に数…

ABC126-B - YYMM or MMYY を解く

ABC126-B - YYMM or MMYY 入力される4桁の数字が年月フォーマット表記で MMYY であるか YYMM であるかを判定する問題 MM は月、YY は年(西暦の下2桁)を表す MM は 01 〜 12 の範囲をとり、YY は 00 〜 99 の範囲をとる こうして見るととても簡単そうに見え…

ABC125-B - Resale を解く

ABC125-B - Resale N個の宝石がある i 番目の宝石は Vi の価値があり、コスト Ci を払って手に入れることができる (手に入れた宝石の価値の和) - (支払ったコストの和) の最大値を求める問題 単純に考えて、 Vi < Ci となる宝石を手に入れるメリットは…

ABC124-B - Great Ocean View を解く

ABC124-B - Great Ocean View 東西に N 個の山があり、西の果てには海がある ある山(山Aとする)より西にある山の高さがすべて 山A の高さ以下の場合 山Aからは海を見ることができる このとき、海を見ることができる山はいくつあるかを求める まず、西端に…

ABC123-B - Five Dishes を解く

ABC123-B - Five Dishes 調理時間がそれぞれ A分、B分、C分、D分、E分かかる料理がある また、10の倍数の時間のときだけ注文ができる すべての料理を注文するとき、最後の料理の到着が最も早くなる注文方法を求める 5つの料理の注文順番は 5! = 120 通りある…

ABC122-B - ATCoder を解く

ABC122-B - ATCoder 文字列 S が与えられる Sの(連続した)部分文字列であり、最も長い "ACGT文字列" を求める問題 "ACGT文字列" とは、"A", "C", "G", "T" 以外の文字を含まない文字列を指す 今回は、カウンタ変数を用意し ACGT文字列だったときに +1 ずつ…

ABC121-B - Can you solve this? を解く

ABC121-B - Can you solve this? N個の数列 { Ai1, Ai2, ... AiM } と 数列 { B1, B2, ... , Bn } および整数 C が与えられる Ai1B1 + Ai2B2 + ... + AiMBM + C > 0 となるものはいくつあるかを答える問題 問題文だけ読むとわかりづらいのでサンプルを見てみ…

ABC120-B - K-th Common Divisor を解く

ABC120-B - K-th Common Divisor AもBも割り切れる数のうち、K番目の大きさのものを出力する問題 1から順に割れる数を挙げていって、K番目の約数が見つかったら 出力すればいい 以上を踏まえて書いたコードを以下に示す 提出したコード # 入力 A,B,K=map(int…

ABC119-B - Digital Gifts を解く

ABC119-B - Digital Gifts 金額が列挙されるので、その合計を求める問題 単位は "JPY" と "BTC" の2種類あるので、 "BTC" の場合は 380000倍して "JPY" に変換する必要がある (現在 1BTC = 1350000JPY ぐらいなので、この頃買っていたら 3倍以上になってた…

ABC118-B - Foods Loved by Everyone を解く

ABC118-B - Foods Loved by Everyone 複数行の数列が与えられる 全行に共通して存在する数字の数をカウントする問題 今回は入力値の取得の際に少し注意する必要がある 行の先頭列は「その行は何列存在するか」という情報を表す数値なので 不要な情報である …

ABC117-B - Polygon を解く

ABC117-B - Polygon 与えられた長さの辺を使ってN角形が作れるか、という問題 N角形を作ることができる条件は以下の通り与えられている 定理: 一番長い辺が他のN−1辺の長さの合計よりも真に短い場合 N角形を作ることができる 上記の定理に従って、与えられ…

ABC116-B - Collatz Problem を解く

ABC116-B - Collatz Problem 初項が与えられ、偶数なら半分に、奇数なら 3倍 + 1 していき数列を作成する 同じ数が2回出現するのは何番目かを答える問題 サンプルを見てみると … , 8, 4, 2, 1, 4, 2, 1, 4, 2, 1, … と最後には収束している となると初めに2…

ABC115-B - Christmas Eve Eve を解く

ABC115-B - Christmas Eve Eve 複数の品物の料金が与えられる 一番高い品物は半額で買うことができる このとき、全ての品物を買うために必要な金額はいくらかを求める問題 まずは金額を全てリストに入れてソートする こうすることで金額順に並べることができ…

ABC114-B - 754 を解く

ABC114-B - 754 数字列が与えられる 連続する3文字を切り出して 753 と差を取ったとき 差の絶対値が最も小さくなる場合を求める (関係ないけど、問題「754」なのに 753 との差なのか) リストのスライスを使って3文字ずつ切り出して差を取っていけばいい 以…

ABC113-B - Palace を解く

ABC113-B - Palace 標高が複数与えられるので、それを元に平均気温を計算し 入力値 A に最も近いものを求める問題 最も近い、というのはつまり差の絶対値が小さいということである 全地点についての平均気温を求め、差の絶対値が最も小さいものを出力する 以…

ABC112-B - Time Limit Exceeded を解く

ABC112-B - Time Limit Exceeded 与えられる コスト ci と 時間 ti について ti が T 以下のもののうち、ci が最小となる場合を求める問題 まずは、コストを小さい順にソートする 上から順に見ていったとき ti が T 以下のものを見つけたらそれが答えになる …

ABC111-B - AtCoder Beginner Contest 111 を解く

ABC111-B - AtCoder Beginner Contest 111 N以上の数について一つずつ見ていったとき 初めて10進数表記で全ての桁が同じになる数を出力する問題 Nに1ずつ加算していって、すべての桁が同じになったら出力すればいい ただし、N自身が答えの場合もあるので注意…