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 件のコメント:
コメントを投稿