こんにちは, Shinoryoです.
今回はC++入門 AtCoder Programming Guide for beginners(APG4b)を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います.
C++入門 AtCoder Programming Guide for beginners (APG4b) - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
EX19 - 九九の採点
前提として, 「Pythonでは関数への引数は全て参照渡しされます」が, 「変数の型によって, 関数内で受けた変更が関数外で保存されるかどうかが変わります」.
- mutable型:関数内で受けた変更が関数外で保存される型. list, set ,dict等.
- immutable型:関数内で受けた変更が関数外で保存されない型. int, float, str, tuple等.
この問題では, 関数内で受けた変更が関数外で保存されるmutable型を使うことによって, 記述することを考えます. 問題文でのプログラムと異なり, int型の変数「correct_count」「wrong_count」をまとめてリストにすることによって, プログラムを完成させることができます.
EX20 - 報告書の枚数
問題にあるプログラムをPythonで書き直すと以下のようになるでしょうか.
「count_report_num(children, x)」は, 組織番号xの子組織一覧children[x]をもとに, 提出する報告書の枚数を計算する関数です.
- 組織番号xの子組織が存在しない場合, その組織が提出する報告書は, 1枚となる.
- 組織番号xの子組織が存在する場合, その組織が提出する報告書は, それらの子組織が提出する報告書の合計+1枚(その組織自体の分)となる.
再帰関数を利用して報告書の枚数を求めます.
EX21 - 計算量の見積もり
問題にあるプログラムをPythonで書き直すと以下のようになるでしょうか.
各関数における時間計算量は, 次のように計算されます.
- f0:$O(1)$($O(0)$? あまりよく分かっていないです)
- f1:$O(N + M)$
- f2:$O(N^2 / 2)$
- f3:$O(1)$
- f4:$O(N^2)$
- f5:$O(NM)$
ゆえに, 消すべきは「a4 = f4(n)」になります. しかし, Pythonでは計算が重いからかTLEになってしまいました.
参考にしたサイト等
- rcmdnk様による「Pythonでの引数の取り扱いの罠等」
Pythonでの引数の取り扱いの罠等
Pythonでのリストのコピーとか, 関数に引数を渡す時に 未だにハマる事になるのでその辺のメモ.
関連記事
AtCoder APG4bをPythonで解く(Ex1~5)
こんにちは, Shinoryoです. 今回は C++入門 AtCoder Programming Guide for beginners(APG4b) を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います. C++入門 AtCoder Program...
AtCoder APG4bをPythonで解く(Ex6~10)
こんにちは, Shinoryoです. 今回は C++入門 AtCoder Programming Guide for beginners(APG4b) を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います. C++入門 AtCoder Program...
AtCoder APG4bをPythonで解く(Ex11~15)
こんにちは, Shinoryoです. 今回は C++入門 AtCoder Programming Guide for beginners(APG4b) を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います. C++入門 AtCoder Program...
AtCoder APG4bをPythonで解く(Ex16~18)
こんにちは, Shinoryoです. 今回は C++入門 AtCoder Programming Guide for beginners(APG4b) を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います. C++入門 AtCoder Program...
AtCoder APG4bをPythonで解く(Ex22~24)
こんにちは, Shinoryoです. 今回は C++入門 AtCoder Programming Guide for beginners(APG4b) を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います. C++入門 AtCoder Program...
0 件のコメント:
コメントを投稿 (Please feel free to ask me about your questions! You can use Japanese or English in the comments.)