解いた問題のソースコードと解説など。


二分探索

POJ 2773 Happy 2006

問題 自然数m, Kが与えられる。mと互いに素なK番目の自然数を返せ。 やりかた 逐一調べると当然間に合わない。ここは二分探索+包除原理。まず二分探索で解の候補を上げ、その解の候補に対して、それ以下の自然数でかつmと互いに素なものの個数を計算し、その…

POJ 2782 Bin Packing

問題 アイテムがN個あり、それぞれの重さが与えられる。これらのアイテムをビンに詰めたいとする。一つのビンにたいして最大で2個までのアイテムを詰められる。このとき必要な最小のビンの数を求めよ。ただし一つのビンに詰めるアイテムの重さの和がLより大…

POJ 1905 Expanding Rods

問題 長さLの鉄線をn度で熱すると長さがL*(1+n*C)に変化する。Cは膨張係数である。この鉄線を向かい合わせの壁に取り付けて熱すると膨張して弧を描くようにしなる。熱したときの鉄線の中心部の縦方向への変位を求めよ。 やりかた 弧になったときの弧長をL'、…

POJ 1505 Copying Books

問題 要素数mの数列をk個の連続する数列に分割する。分割したそれぞれの数列の要素の和を計算し、そのうち最大となる値を最小化するように数列を分割したい。この条件をみたすように数列を分割して出力せよ。ただし複数の分割方法がある場合には、分割したは…

POJ 2601 Simple calculations

問題 という漸化式の数列がある。が与えられるのでを求めよ。 やりかた (たぶん嘘解法) に対してがmonotonicalに変化するからに関して二分探索すればいいんじゃまいか(・∀・)!! で通ってしまった。よく考えるとmonotonicalじゃないような。 実験すると一般項…

POJ 2253 Frogger

問題 x,y座標が幾つか与えられる。0番目の点から1番目の点に向かって、直接、もしくはその他の点を経由しながら移動する。点から点へのジャンプにかかるコストは点と点のユークリッド距離で表される。移動中にかかる最長のコストを最小化せよ。 やりかた 二…

POJ 2959 Ball bearings

問題 直径Dの円に内接する複数の直径dの小円を考える。小円同士の中心が少なくともs+d以上離れているように配置したい。最大でいくつの小円を配置できるか。 やりかた 配置する間隔は等間隔にする。間隔は円の個数に対して単調減少なので二分探索できる。C個…

SRM 325 Div1 Medium ModularInequality

問題 数列Aと整数Pが与えられる。を満たす整数Xの個数を求めよ。 やりかた 数列の中央値に近い部分をXとすると題意の和は最も小さくなり、中央値から離れると和は大きくなっていく。式を満たすXは中央値付近でひとつづきに現れるので、これらの内の最大値と…

SRM 329 Div1 Medium LogCutter

問題 長さLの丸太がある。この丸太はK箇所で切断でき、位置はであたえられる。この丸太を最大C箇所で切断できるとした時に、もっとも長い丸太を最小化せよ。返す値は最小化した値と最初に切断する位置とせよ。最初の切断位置が複数取れる場合は最も小さい値…

SRM 582 Div1 Easy SpaceWarDiv1

問題 魔法少女たちがおり、彼女らの力がvector int で与えられる。敵が複数おり、強さenemyStrength[i]の敵がenemyCount[i]匹いる。魔法少女達は自分と同じか自分より弱い敵を倒すことができ、一体倒すにつき疲労度が+1される。敵をすべて倒した時にもっとも…

SRM 456 Div2 Hard CutSticks

問題 http://apps.topcoder.com/stat?c=problem_statement&pm=10563&rd=13909n本の棒の長さが与えられる。好きな棒を好きな長さにC回まで切ることができる。その時にK番目に長い棒の長さを最大化せよ。なおK本以上の棒が出来るまでは必ずカットを行う。 やり…

Get up! 明日のSUPER ST@R!