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

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

■感想.
1. 最小公倍数を計算するときの計算順序で, 途中躓いたが, 計算順序を変えてみる方法に気付いたので, ACとなった.
2. コーディング後, 解説を見たら, おおよそ同じ方針だったので, まずまずの結果だったと思う.


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


■C++版プログラム.


■参照サイト
AtCoder Beginner Contest 070
What is most efficient for GCD?

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

C++の練習を兼ねて, AtCoder Beginner Contest 109 の 問題D(Make Them Even)を解いてみた.

■感想.
1. 下記 C++版プログラム(RE版) は, おそらくロジック的に間違ってないと思われるが, 時間内では, テストケース(C018_scrambled – C029_scrambled)で, Runtime Error となった.

2. Runtime Error の 原因としては, ネット上の情報で, “vectorは要素数が数万くらいになるとデータ構造がぶっ壊れる???” との指摘をされている記事があったので, vector を使ったことが原因と推測した.
※参照URL② にあるように, vector よりも 配列の方が, 処理は早いとのこと.

3. コンテスト終了後に, 解説を見たところ, 一筆書きによる解法が紹介されていたので, 下記 C++版プログラム(AC版) のような形で実装したところ, 全テストケースを通過出来た.
※但し, 一筆書きによるコイン情報の保存方法に, 一次元配列を使ったが, 不慣れなせいか, これを一筆書きの順で保存するロジックを構築するのに, 膨大な時間を使ってしまった(汗).


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


■C++版プログラム(RE版)


■C++版プログラム(AC版)


■参照サイト
【参照URL①】AtCoder Beginner Contest 109
【参照URL②】vectorの要素数上限とか

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

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

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


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


■C++版プログラム


■参照サイト
AtCoder Beginner Contest 072

Kaggle に挑戦してみた(1)

Kaggle の仕組みに慣れるため, Digit Recognizer (Competition)に挑戦してみた.

■感想.
1. Kaggle の Kernels で, プログラム実行すると, CSVファイル(results.csv) に, インデックス名 ‘ImageId’ が出力されず, 苦戦した.
2. 一つのセルで, プログラム実行(CSV出力まで)すると, 1. の現象が起こるらしいことが確認できた.
-> CSVファイル出力に関するプログラムだけ, 別セルで実行したところ, 1. の現象が解消した(※Kaggle の Kernels の bugか?).
-> 下記, Python版(Kaggle)プログラムは, 二つのセルで実行する版を転記している(※1. の現象が改善された版)
3. ちなみに, Google Colaboratory 上では, 一つのセルで, プログラム実行(CSV出力まで)しても, 想定通り, インデックス名 ‘ImageId’ が出力され, 1. の現象は起きなかった.


詳細は, 本家のサイトDigit Recognizerをご覧下さい.


■Python版(Google Colaboratory)プログラム


■Python版(Kaggle)プログラム

■ ■ ■ 提出手順(概要) ■ ■ ■
■エラー時
① CSVファイル確認(インデックス名が表示されなかった)

② 提出するためにボタン押下

③ CSVファイルアップロード、説明文追記など

④ エラー表示を確認

■OK時
① CSVファイル確認(インデックス名 ‘ImageId’ が表示された)

② 提出するためにボタン押下

③ CSVファイルアップロード、説明文追記など

④ 提出完了(チュートリアル完了、Leaderboard に掲載されることも確認できた)


■参照サイト
Digit Recognizer

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