数直線上を[-A, B]の範囲で動けるロボットがいます。
右(R)か左(L)へ進むよう指示を出します。
初めロボットは0の点に配置されています。
指示が終わったとき、ロボットはどの点にいるでしょう。
minとmaxで範囲を超えないよう押さえ込みます。
from math import * class OneDimensionalRobotEasy: def finalPosition(self, commands, A, B): cur = 0 for c in commands: if c == "R": cur = min(B, cur + 1) elif c == "L": cur = max(-A, cur - 1) return cur
飴の入った箱が与えられます。
全ての箱の中身を合わせると飴の数はC個になります。
それぞれの箱には、その箱に入っている飴の数の上限が与えられています。
今X個の飴が必要です。
最低でいくつの箱を取り出せば良いでしょう。
(最低限得られる飴の数) = max(0, C - (開けていない箱の上限の和))
あとは上限の大きな箱から開けていき最低限得られる飴の数がXを超えるまで回せば求まります。
tupleで与えられているのを忘れ.sort()を使っていたため弾かれてました。
プラグインに頼り切った結果です。残当。
class MysticAndCandiesEasy: def minBoxes(self, C, X, high): N = len(high) high = list(high) high.sort() su = [sum(high[:i]) for i in xrange(1, N + 1)] for i in xrange(N): if C - su[N - i - 1] >= X: return i return N
隣接行列が与えられます。
ある人が長さLの経路が何通りあるか調べたいそうです。
多項式時間で解けるでしょうか。
ある点を通る閉路(単純閉路?)が二つ以上存在すると指数時間必要になります。
これを求めるには始点(終点)を合流地点とするような二つの閉路の存在を確かめれば十分です。
class BigOEasy: def isBounded(self, graph): graph = [map(lambda x: x == "Y", g) for g in graph] N = len(graph) def check(start): q = set([start]) visited = [False] * N flag = 0 while len(q) != 0: cur = q.pop() for i in xrange(N): if not graph[cur][i] or visited[i]: continue if i == start: flag += 1 if flag > 1: return True else: visited[i] = True q.add(i) return False for i in xrange(N): if check(i): return "Unbounded" return "Bounded"