Topcoder SRM 400
div1 easy
問題
数字n(2<=n<=10^18)が与えられる。 n = p^q (p:素数 q:2以上の整数)となるようなp,qが存在するか判定し、存在すればp,qを返す。
解く
- q>=2だからpは10^9以下
- 2^60>10^18だからqは60以下
- n^(1/i)を求めて、n^(1/i)が整数であり素数であればp=n^(1/i) q = iが答え
- 整数かどうかはn^(1/i)を整数に丸めたものをi乗してnに一致するかを調べる。
- あれ……WAだ…。
- どうやらpow(n,1/i)を丸めるときに誤差死してたみたい。
- (long long)(pow(n,1/i)+0.05)に書き換えた
div1 middle
問題
文字列のi番目からj番目までの部分を反転する操作をr(i,j)と書き、その操作列r(i1,j1),r(i2,j2)...をrevasal chainとよぶ(ただしi1>=i2>=... , j1<=j2<=...) initとgoalが与えられるので、initからgoalを作るrevasal chainの最小サイズを求める。
解けない
greedyでやったけどだめだったみたい。(正解率20%という恐ろしい問題)
DPでやればいいのだけど、解説を見てもよくわからなかった。悲しい。