TopCoder SRM 497
コード貼るならはてなでしょってことで、ひさびさにこちらに書きます。
5回目のTopCoder挑戦です。これまでの記録はこちら。 http://www.topcoder.com/tc?module=MemberProfile&cr=22907785&tab=alg
Div2 Easy: Filtering
public class Filtering { public int[] designFilter(int[] sizes, String outcome) { int minA = Integer.MAX_VALUE; int maxA = -1; int minR = Integer.MAX_VALUE; int maxR = -1; char[] chars = outcome.toCharArray(); for (int i = 0; i < chars.length; i++) { char c = chars[i]; if (c == 'A') { minA = Math.min(minA, sizes[i]); maxA = Math.max(maxA, sizes[i]); } else { minR = Math.min(minR, sizes[i]); maxR = Math.max(maxA, sizes[i]); } } int[] ret = {minA, maxA}; if (minR != Integer.MAX_VALUE && minA < minR) { ret = new int[0]; } else if (maxR != -1 && maxR < maxA && minR < maxR ) { ret = new int[0]; } return ret; } }
Easyのわりに問題文長い。。理解に時間がかかった。
maxRの更新箇所でコピペの修正ミスがあり、Easyでは初のFailed。
そもそもRは最小値と最大値を取る必要なかった。
Div2 Medium: PermutationSignature
いい加減に解きたいMedium問題。
import java.util.Arrays; import java.util.List; import java.util.ArrayList; import java.util.Stack; public class PermutationSignature { public int[] reconstruct(String signature) { int[] ret = new int[signature.length()+1]; for (int i = 0; i < ret.length; i++) { ret[i] = i+1; } char[] chars = signature.toCharArray(); List<Integer> res = new ArrayList<Integer>(); Stack<Integer> stack = new Stack<Integer>(); stack.push(1); for (int i = 0; i < chars.length; i++) { if (chars[i] == 'I') { while (stack.size() != 0) { res.add(stack.pop()); } } stack.push(ret[i+1]); } while (stack.size() != 0) res.add(stack.pop()); for (int i = 0; i < ret.length; i++) { ret[i] = res.get(i).intValue(); } return ret; } }
境界条件ではまって提出が間に合わなかった。10分ほどオーバーして書き上げたのがこれ。
合ってると思うのですがいかに。
というわけで
初のEasy失敗でスコア0・・・。最悪の結果に終わり、レーティングは854まで落ちてしまいました。
次回から挽回です!