考えて競プロする

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

2019-06-01から1ヶ月間の記事一覧

ABC108-B - Ruined Square を解く

ABC108-B - Ruined Square 正方形の座標を反時計回りに (x1, y1), (x2, y2), (x3, y3), (x4, y4) とする (x1, y1), (x2, y2) のみが与えられるので、そこから (x3, y3), (x4, y4) を求める問題 いまいちイメージしづらいのでサンプルを見て考えていくことに…

ABC107-B - Grid Compression を解く

ABC107-B - Grid Compression 実装系の問題 白いマスと黒いマスからなるマス目が与えられる 白いマスのみからなる行や列がある場合、その行/列を除外し圧縮していく 入力は1行ずつ受け取るので、行の圧縮は受け取った時点で 行なってしまえばいい 列の圧縮…

ABC106-B - 105 を解く

ABC106-B - 105 1 以上 N 以下の奇数のうち、正の約数をちょうど 8 個もつ数を求める問題 N は 1 以上 200 以下という緩い制約であるため N 以下の奇数一つ一つについて 約数が 8 個あるかどうかを確認していきたいと思う 以上を踏まえて書いたコードを以下…

ABC105-B - Cakes and Donuts を解く

ABC105-B - Cakes and Donuts 4ドルのケーキと7ドルのドーナツをちょうどNドルになるように 買うことができるかを判定する問題 N は 1 以上 100 以下の整数であるので 4ドルのケーキだけを買っても最大で25個 7ドルのドーナツは最大でも14個 までしか買えな…

ABC104-B - AcCepted を解く

ABC104-B - AcCepted 与えられた文字列が以下の形式を満たすか判定する問題 ・先頭の文字が 'A' ・先頭から3文字目と末尾から2文字目の間に 'C' が含まれる ・上記2文字以外はすべて小文字である 上記の3条件を一つずつ丁寧に判定するだけだ 以上を踏まえて…

ABC103-B - String Rotation を解く

ABC103-B - String Rotation 2つの文字列が与えられる 一方の文字列が、もう一方の文字列を回転させて 出来たものであるかどうかを判定する問題 回転とは以下のような処理のことを指す(わかりやすくするよう一部着色した) ABCDE EABCD DEABC CDEAB BCDEA A…

ABC102-B - Maximum Difference を解く

ABC102-B - Maximum Difference 整数が複数与えられるので その中で差の絶対値が最大になる2ペアを見つける問題 整数は最大で100個までしか与えられないので 全ての組み合わせを試したとしても十分に間に合うはず よって組み合わせを全列挙する方法で解くこ…

ABC101-B - Digit Sums を解く

ABC101-B - Digit Sums 与えられた整数を、その整数の各桁の和で割り切れるかどうかを判定する問題 例えば、101 が与えられた場合は各桁の和は 1 + 0 + 1 = 2 である 101 は 2 で割り切れないので 'No' を出力する 今回は入力された値について、各桁の和をと…

ABC100-B - Ringo's Favorite Numbers を解く(2)

ABC100-B - Ringo's Favorite Numbers を解く(1) の続き 前回のコードは数ケースで WA が出てしまった 何か考慮漏れがあったのだろうか? 前回の回答方針をもう一度確認してみる > D=0 の場合は N の値そのまま > D=1 の場合は N に 100 を掛けた値 > D=2…

ABC100-B - Ringo's Favorite Numbers を解く(1)

ABC100-B - Ringo's Favorite Numbers 100 で D 回割り切れる正の整数のうち、N番目に小さいものを求める問題 いくつか例を見てみよう まずは入出力例1の D=0 , N=5 の場合 100 で 0 回割り切れる、つまり 1 回も割り切れない正の整数は 1 , 2 , 3 , 4 , 5 ,…

ABC099-B - Stone Monument を解く

ABC099-B - Stone Monument 1本目の柱と2本目の柱の高低差は2m、2本目と3本目の柱の高低差は3m、 3本目と4本目の高低差は4m … というように 高低差は1mずつ大きくなっていっているので 2本の柱の高低差を知ることでそれらの柱が何番目の柱か計算することがで…

ABC098-B - Cut and Count を解く

ABC098-B - Cut and Count 与えられた文字列を一箇所で切断したとき どちらにも含まれている文字が最大でいくつになるかを求める問題 Python のスライスの機能を使って文字列を分断していく 書き方がうろ覚えであったのでひとまず実験のコードを書いてみた …

ABC097-B - Exponential を解く

ABC097-B - Exponential 正整数 X 以下のべき乗数を求める問題 べき乗数とは b^p( 1 <= b , 2 <= p )で表せる数を指す 制約内で考えられるべき乗数を全列挙して、最大のものを出力する という方針で解くことにする べき乗数を列挙するとき、1のべき乗のパ…

ABC096-B - Maximum Sum を解く

ABC096-B - Maximum Sum A , B , C の3つの数が与えられ、K回だけ3つの数のいずれかを 2倍することができる 操作終了後の A , B , C の和の最大値を求める問題 単純に考えて、一番大きい数をK回2倍すれば A , B , C の和は最大になるはず 以上を踏まえて書い…

ABC095-B - Bitter Alchemy を解く

ABC095-B - Bitter Alchemy ドーナツを可能な限りたくさん作る問題 ただし、全種類最低一つは作る必要がある まず全種類を一つずつ作り その残金で一番安いドーナツを可能な限り作る、というやり方であれば 一番多くのドーナツを作ることができるはずだ 以上…

ABC094-B - Toll Gates を解く

ABC094-B - Toll Gates 初期位置から目的地までにいくつかの料金所を経由する そのコストの最小値を求める問題 初期位置から目的地に向かって 1ずつ動かしていった場合をシミュレーションして解く 目的地は2つあるので、どちらの場合もシミュレーションして…

ABC093-B - Small and Large Integers を解く

ABC093-B - Small and Large Integers A以上B以下の数の中で 小さい方からK番目以内 または 大きい方からK番目以内の数を 数が小さい順に列挙していく問題 A = 100 , B = 200 , K = 5 の場合なら 100〜104 の5個と、196〜200 の5個を列挙する かなり簡単そう…

ABC092-B - Chocolate を解く

ABC092-B - Chocolate N人の人が Ai 日の間隔でチョコを食べる 食べた数と余りから用意されていたチョコの数を求める問題 初日は必ずチョコを食べるという条件がカウントをやや難しくしている 入出力例を見て計算方法を考えてみることにする 1人目は 2日間隔…

ABC091-B - Two Colors Card Game を解く

ABC091-B - Two Colors Card Game 青いカードに書かれた文字列全てについてシミュレーションをすればいい (また、赤いカードについてのシミュレーションは無駄である 正の得点となる文字列であれば青いカードの方に出現するからだ) ここで注意しておきたい…

ABC090-B - Palindromic Numbers を解く

ABC090-B - Palindromic Numbers 10000 <= A <= B <= 99999 の制約で A , B が与えられる A以上B以下の回文数はいくつあるかを答える問題 回文数とは、例えば 19291 のような数字 前から読んでも後ろから読んでも同じ文字列になる正の整数のことを指す 今回…

ABC089-B - Hina Arare を解く

ABC089-B - Hina Arare 半角スペース区切りのアルファベットが入力で与えられる これらが 'P', 'W', 'G' のみで成る場合は 'Three' 'P', 'W', 'G', 'Y' のみで成る場合は 'Four' を出力する問題 3種類で構成されているか、4種類で構成されているかを当てれば…

ABC088-B - Card Game for Two を解く

ABC088-B - Card Game for Two 2人のプレイヤーがN枚のカードを交互に取っていく それぞれが取ったカードに書かれた数字の合計を最大にしようとするとき 先攻は後攻に対して何点差をつけられるか、という問題 常に数字が最大のものを取るようにしてシミュレ…

ABC087-B - Coins を解く

ABC087-B - Coins 500円のコインがA枚、100円のコインがB枚、50円のコインがC枚あるとき ちょうどX円となる選び方は何通りあるかを求める問題 コインの選び方を全列挙して、X円に一致するパターンを数える方法で解く 全列挙するためには、0枚, 0枚, 0枚 〜 A…

ABC086-B - 1 21 を解く

ABC086-B - 1 21 与えられた整数 a , b をつなげた数が平方数であるかを判定する問題 平方数とは自然数を2乗した数のことらしい つまり、平方根を取った時に自然数となればそれは平方数であると言える 平方根は sqrt 関数を使用することで求められる 以上を…

ABC085-B - Kagami Mochi を解く

ABC085-B - Kagami Mochi 「餅の上にさらに餅を置く場合は、より直径が小さい場合に限る」 というルールに従って、最大何段重ねの鏡餅をつくれるか、という問題 与えられた餅の直径を、大きい順にソートして 下から置いていくシミュレーションをして解いてい…

ABC084-B - Postal Code を解く

ABC084-B - Postal Code 与えられた文字列が、「(A文字の数字)-(B文字の数字)」 の形式を満たすかを判定する問題 文字列全体の長さが A + 1 + B であることは制約で保証されているので 以下の2点を確認すればOK ・A + 1文字目が "-" であること ・それ以外の…

ABC083-B - Some Sums を解く

ABC083-B - Some Sums 1以上N以下の整数のうち 10進法での各桁の和がA以上B以下であるものの総和を求める問題 制約は 1 <= N <= 10^4 と小さいので 素直に全列挙する方針で解く 以上を踏まえて書いたコードを以下に示す 提出したコード # 入力 N,A,B=map(int…

ABC082-B - Two Anagrams を解く

ABC082-B - Two Anagrams 2つの文字列 s, t が与えられ、各文字を並び替えたものを s', t' とする このとき、辞書順で s' < t' とすることができるかを判定する問題 Python は list を使って文字列を辞書順でソートすることができるので s' を辞書順最小に、…

ABC081-B - Shift only を解く

ABC081-B - Shift only 複数の整数があり、その整数が全て偶数のとき 2で割ったものに置き換えることができる この操作を最大何回できるか? という問題 そのままシミュレーションしていきたいところだが 整数の制約が 1 <= An <= 10^9 とかなり大きい とは…

ABC080-B - Harshad Number を解く

ABC080-B - Harshad Number 与えられた整数(十進数表記)を その整数の各桁を合計したもので割り切れるか判定する問題 各桁の取得をする場合は、文字列型で入力を受けて list でラップすればいい >>> list('123') ['1', '2', '3'] 以上を踏まえて書いたコー…