読者です 読者をやめる 読者になる 読者になる

唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

TopCoder Open Round 2C o-- 1178->1236

topcoder 競技プログラミング

517th, 97.42pts, +0/-1 challenge
Volatility: 378->363

途中で再提出したのとまたchallengeミスしたのが残念(300が通ったので首がつながった

300: SubstringReversal

文字列のある範囲を一回だけ反転できるときの辞書順最小になる交換範囲を答える

現在の位置の文字よりも後ろに辞書順で小さい文字があったら、現在の位置を始点にして交換するのは確定なので、あとは候補を全部出してソートして終わり

class SubstringReversal:
    def solve(self, S):
        L = len(S)
        candidate = []
        for i in xrange(L):
            for j in xrange(i + 1, L):
                if S[i] > S[j]:
                    candidate.append((S[i:j+1][::-1] + S[j+1:], i, j))
            if candidate:
                candidate.sort()
                break
        else:
            return (0, 0)
        return (candidate[0][1], candidate[0][2])
-->