2010-10-01から1ヶ月間の記事一覧

SRM335 Div1 250

問題 数字のmultifactorialを求める式があり,nとkよりその値を計算する.ただし,10^18よりも大きい場合はoverflowと表示する. 考え方 再帰的にfac_k(n)を計算するだけ.かけ算はそれぞれの値の桁数を見て,それがoverflowするかどうかをチェックしてから…

SRM334 Div1 250

問題 覆面算.AからJの文字に0から9の数字を割り当てたときに,答えが最大となる値を見つける.ただし,それぞれの先頭は0ではいけない. 考え方 普通にnext_permutationで全通り調べる,,,とやるとTLE.本番でも撃墜たくさんされたっぽい. まず,ABC+BCA…

SRM333 Div1 250

問題 与えられた出生コードが正しいかどうかのチェック.出生コードは「YYMMDDCCCC」という形をしていて,Yは年,Mは月,Dは日,CCCCはチェック用コード.ただし,Mは男性なら1-12,女性なら51-62で表す.正しいコードとは,出生コードが11で割り切れて,年…

SRM331 Div1 250

問題 n人いて,いくつかの歌のうち歌えるかどうかが文字列で与えられる.すべての人が一回は歌えるように歌を選んだとき,最小の曲数を返す. 考え方 全部試してみるしかない.最大で10曲しかないので,その組み合わせは2^10程度. ビット演算を使うと集合の…

SRM330 Div1 250

問題 「-,=,」で構成される文字列の中で一番長い矢印の長さを返す. 考え方 文字列を見ていって,「>」か「

SRM332 Div1 250

問題 数字のリストが与えられる.それらの数字はいくつかペアにすることができ,その値は2つのかけ算になる.リストの合計の最大値を返す. 考え方 簡単なdp. ペアにしたとき,なるべく大きいモノ同士のかけ算の方が値が大きくなる(正同士でも負同士でも)の…

CF Beta Round 34

英語の理解力がなさすぎる... 問題セットは簡単め. A. Reconnaissance 2 兵士が円周上に立っている.兵士の身長が与えられるので,一番身長差が小さいところの添え字を返す. やるだけ. B. Sale n台のTVを売買しに行く.各TVは値段があり,負の値段はす…

SRM441 Div2 500

問題 折り紙を,横に1回,縦に何回か折って色を塗る(下までしみこむ). 考え方 折りきった最後の長方形での色を塗った個数を計算して,横に折ったとき色がつく部分の増減した個数を加えて,その個数を(cnt+1)倍すればいい. 反省 キャストし忘れに注意. int…

SRM482 Div2 900

実装が遅い...

SRM442 Div2 1000

問題 長方形の積み木を積んで2つの塔を作る.2つの塔の高さが同じで最大にできるモノをさがす. 愚直に調べる(Aに積む,Bに積む,積まないの3通り)と3^50でTLE. 考え方 2つの塔の状態は低いほうの塔の高さと塔の差分だけで表現できる.また,制約で「The su…

SRM442 Div2 500

問題 ある範囲の数字xの素因数分解したときの個数が素数かどうか調べる. 考え方 素因数分解と素数生成をコピペした. 間に合わないと思って書いてみたけど,最悪のケースでも全然間に合った.

SRM484 Div2 550

問題 RabbitNumberがいくつあるかを調べる.RabbitNumberは,xの各桁の和をf(x)とすると,f(x*x)==f(x)*f(x)となるx. 考え方 範囲が1から1,000,000,000までなので,ふつうに計算したらTLE. 法則性を確認するために,すべてのRabbitNumberを表示してみると…

project euler 303

やってみた.死んだ.

SRM484 Div2

うーんうーん.

11855 Buzzwords

コンテストに参加してたりなんだり.全然できないけど,問題だけでも読むようにはしてる.

二分探索

ある条件を満たす最小(最大)の値を求めるような問題に適用できる。 //整数値の場合 int l = -INF, u = INF; while(u-l>1){ int m = (u+l)/2; if(mが条件を満たす) u=m; //解は(l,m] else l=m; //解は(m,u] } //小数値の場合 double l = -INF, u = INF; for(i…