C++ の動作確認をしてみた(15)

C++の練習を兼ねて, AtCoder Beginner Contest 072 の 問題D(Derangement)を解いてみた.

■感想.
1. 解説の方針と, 多分おおよそ一致していると思うので, 良かったと思われる.
2. 隣り合う二つの数を選んでスワップするというシンプルな操作であるが, 個人的には, 面白い問題だったと思う.


本家のサイトABC072 / ARC082 解説をご覧下さい.


■C++版プログラム


■参照サイト
AtCoder Beginner Contest 072

C++ の動作確認をしてみた(14)

C++の練習を兼ねて, AtCoder Beginner Contest 108 の 問題D(All Your Paths are Different Lengths)を解いてみた.

■感想.
1. 解説を読んだものの, 正確に理解できている自信は無い.
2. とりあえず, テストケース(01.txt ~ s2.txt)は, 全て通過した.
3. 解説にある “頂点 i -> 頂点 i + 1 へ, 長さ 2 の i乗 の 辺を張る” は, “頂点 i -> 頂点 i + 1 へ, 長さ 2 の (i – 1)乗 の 辺を張る” に読み替えて実装した.
4. 解説にある 長さX の辺に関する記述が, 何を指しているか, 理解出来なかったので, 読み飛ばしている.


本家のサイトARC 102 解説をご覧下さい.


■C++版プログラム

[出力例]


■参照サイト
AtCoder Beginner Contest 108

C++ の動作確認をしてみた(13)

C++の練習を兼ねて, AtCoder Beginner Contest 108 の 問題C(Triangular Relationship)を解いてみた.

■感想.
1. 時間内で, テストケース C022_scrambled 以外まで通過出来た.
2. 時間後, 変数 N, K の型 を int -> LL で動作確認したところ, 全テストケース通過出来た.
-> 時間内に, 変数の型 が bug の原因だった点に, 気付けなかったのは残念だったが, 今後の注意点として, 覚えておくようにしたい.
3. テストケース 35897 932 -> 114191 = 54872 + 59319 = 38 * 38 * 38 + 39 * 39 * 39 に等しいことから着想を得て, 以下のようなソースコードとなったが, 個人的には, 解説されているロジックで実装するのが, 一番スマートだと思う.


本家のサイトARC 102 解説をご覧下さい.


■C++版プログラム


■参照サイト
AtCoder Beginner Contest 108

C++ の動作確認をしてみた(12)

C++の練習を兼ねて, AtCoder Beginner Contest 074 の 問題C(Sugar Water)を解いてみた.

■感想.
1. 結構解ききるまでに, 結構苦労した.
2. 濃度の上限 100 × E / (100 + E) に関するバグを修正するのに, 時間かかってしまった.
3. テストケース 01.txt が, 通過しなかったので, 試行錯誤の結果, 濃度上限が, 0% のパターンと推定して,
砂糖水が, 100 × A [g] あると仮定して, 漸く全テストケースを通過した.


本家のサイトARC083 / ABC074 解説をご覧下さい.


■C++版プログラム


■参照サイト
AtCoder Beginner Contest 074

C++ の動作確認をしてみた(11)

C++の練習を兼ねて, AtCoder Beginner Contest 075 の 問題B(Minesweeper)を解いてみた.

■感想.
問題のタイトル的に, 面白そうな問題だったので, 解いてみた.


本家のサイトABC 075 解説をご覧下さい.


■C++版プログラム


■参照サイト
AtCoder Beginner Contest 075

C++ の動作確認をしてみた(10)

C++の練習を兼ねて, AtCoder Beginner Contest 107 の 問題C(Candles)を解いてみた.

■感想.
時間内に解答出来なかったので, 解説見て解き直ししたところ, “連続する K 本のろうそくに火を付けるのが最適” との記述があり,
なるほどと感心してしまった.
※そのような発想が出てこなかった(汗), とはいえ, 非常に勉強になったので良かったと思う.


本家のサイトABC #107 / ARC #101 Editorialをご覧下さい。


■C++版プログラム


■参照サイト
AtCoder Beginner Contest 107

C++ の動作確認をしてみた(9)

C++の練習を兼ねて, AtCoder Beginner Contest 076 の 問題C(Dubious Document 2)を解いてみた.

■感想.
ゴリゴリ書いた印象で感触悪かったものの, 解説と方針がおおよそ一致していたので, とりあえず, 及第点までは行けたかと思う.


本家のサイトAtcoder Beginner Contest 076 解説をご覧下さい。


■C++版プログラム


■参照サイト
AtCoder Beginner Contest 076

C++ の動作確認をしてみた(8)

C++の練習を兼ねて, AtCoder Beginner Contest 077 の 問題C(Snuke Festival)を解いてみた.

■感想.
① N が 最大 10の5乗 と指示があったので, for文 の 3重ループは, TLE になると推測し, 二分探索などを模索した.
② lower_bound, upper_bound という便利な関数が用意されていることが, ネット上の情報で判明したので, 計算量削減に使えないか, 検討してみた.
③ 最初, A を 基準に試行錯誤してみたが, 条件を満たす組み合わせの数え上げが上手くいかず, 次に, B を 基準に試行錯誤してみたところ, 条件を満たす組み合わせの数え上げが上手くいった.
④ 本家の解答を見たところ, おおよそ解答方針が一致していたので, 時間かかってしまったものの, とりあえず粘ってみた甲斐があったと思われる.


本家のサイトARC084/ABC077 解説をご覧下さい。


■C++版プログラム


■参照サイト
AtCoder Beginner Contest 077
lower_bound、upper_boundの基本的な使い方

C++ の動作確認をしてみた(7)

C++の練習を兼ねて, AtCoder Beginner Contest 106 の 問題D(AtCoder Express 2)を解いてみた.

■感想.
① 時間内では, C011_scrambled ~ C016_scrambled で, TLEとなったので, ロジック見直しが必要となった.
※下記ソース: ABC_106_D_1.cpp
② 解答を確認して, 計算量の削減方法について, 大変参考になった.
※下記ソース: ABC_106_D_2.cpp


本家のサイトAtCoder Beginner Contest 106 解説をご覧下さい。


■C++版プログラム


■参照サイト
AtCoder Beginner Contest 106

C++ の動作確認をしてみた(6)

C++の練習を兼ねて, AtCoder Beginner Contest 079 の 問題C(Train Ticket)を解いてみた.

■感想.
① 解答を後で見たところ, if – else if で押し切っているので, なるほどと感心させられた.
② +++, ++-, … , --- の8通り調べる方針は, 一致していたので, 着眼点が大きくブレてはいなかったと思われる.
③ char型 -> int型 の変換方法について, 勉強になったと思われる.


本家のサイトABC 079 解説をご覧下さい。


■C++版プログラム

■参照サイト
AtCoder Beginner Contest 079
char型をint型に変換する方法と注意【数値化 キャスト 文字列変換】