AtCoder APG4bをPythonで解く(Ex19~21)

投稿日: 

Atcoder Python

B!
Daniel AgreloによるPixabay(https://pixabay.com/)からの画像

こんにちは, Shinoryoです.

今回はC++入門 AtCoder Programming Guide for beginners(APG4b)を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います.

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になってしまいました.

参考にしたサイト等

関連記事

Search

About Me

自分の写真
理系大学生でした. Bloggerを利用して発信を行っています.

Labels

Blog Archives