SRM 602 Div3 Easy MiddleCode
回答substringの仕様に気をつけて頑張るだけ
substring(a,b) は aからb-1 までの文字
public String encode(String s) { String t = ""; while (s.length() > 1) { int mid = s.length() / 2; if (s.length() % 2 == 1) { t += s.charAt(mid); s = s.substring(0, mid) + s.substring(mid + 1); } else { if (s.charAt(mid - 1) < s.charAt(mid)) { t += s.charAt(mid - 1); s = s.substring(0, mid - 1) + s.substring(mid); } else { t += s.charAt(mid); s = s.substring(0, mid) + s.substring(mid + 1); } } } return t + s; }
SRM 603 Div2 Medium SplitIntoPairs
回答なんとAを昇順にソートして、そのとなりの要素とかけてXより大きかをチェックするだけという。
あとは、オーバーフローに気をつけてlong にキャストするのは忘れずに
理由
負*負,正*正 はもちろん正になるため、普通にカウントできる
問題は
負*正 この組み合わせの時でこれがXより大きいかが問題。
ソートすると隣り合った負*正 が一番大きくなります。(絶対値が小さくなります)
これを判定するだけです。
そして、うまく組み合わせると こんなシンプルになります。
public int makepairs(int[] A, int X) { Arrays.sort(A); int count = 0; for (int i = 0; i < A.length ; i += 2) { if ((long) X <= ((long) A[i]) * A[i + 1]) { count++; } } return count; }
0 件のコメント:
コメントを投稿