ICPCメモ === # python編 ## 入出力 ICPCでは入出力を標準入出力で与えられる 例えば以下のように1行で整数1つが与えられるとき ``` 2 ``` pythonでは ```python= n = int(input()) ``` 1行に以下のように複数与えられる場合 ``` 6 2 3 ``` pythonでは`sprit()`でスペース区切りでリストにしmapでキャストする ```python= a, b, c = list(map(int, input().sprit())) ``` 更に, ICPCでは最後の入力1行に`0`が与えられるので気に留めてほしい 出力に関しては`print()`で問題のフォーマットに合わせて出力すれば良い. しかし, `print()`は出力にラグがある. ラグを減らすためには ```python= print("", flush=True) ``` ## 再帰呼び出し pythonではforなどのループが極端に遅い, そのため, 関数の再帰呼び出しが多用される. しかし, 言語仕様で再起呼び出しの上限数が決まっている. これを回避するには以下のように再起呼び出しの上限を書き換える必要がある. 以下の例では10000回に変更している. ```python= import sys sys.setrecursionlimit(10000) ``` また, 再起呼び出しをする中で過去にした処理を何度もするのは非効率. そこで, *メモ化*というテクニックがある 簡単に言えば配列に出力を記憶させておくだけのこと. # 国内予選2018C ## 概要 あるビルで予算ちょうどで借りれる最大の連続フロア数を求める ## 問題 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1626&lang=jp ## 解答 http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=3717030#1 ## 解説 家賃計算は $$ b = \sum^ni+nx \\ =n(n+1)/2+xn \\ $$ $n$: フロア数, $x$: 最下層 変形すると(略) $$ x = (b - n *(n-1)/2 )/n $$ $x$は自然数、$1<n<=b$を探索するだけ 計算量も高々知れてる # 国内予選2018D ## 概要 あるビルで予算ちょうどで借りれる最大の連続フロア数を求める ## 問題 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1626&lang=jp ## 解答 http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=3717030#1 ## 解説
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up