TopCoder SRM680 (Div2)
19時に上がり、ほどほどにジムへ。
筋トレとランニングをこなした後はゲーセン。
混んでいたのでほとんど収穫なし。Pフリーで殴りきれない…。
帰宅した後はTopCoder SRM680に参戦。
easyは、文字列があって、同じ文字じゃなくてなるべく距離が遠いものを出力する問題。
文字数長が小さいので全部調べて最大のものを求めるだけ。初期値は-1で。
public class BearPair {
public int bigDistance(String s) {
int max = -1;
for(int i = 0 ; i < s.length(); i++){
for(int j = i + 1 ; j < s.length(); j++){
if(s.charAt(i) != s.charAt(j))max = Math.max(max, (j - i));
}
}
return max;
}
}
mediumは、最低限atLeast[i]だけ離れている場所が良いという客がいて、
客は順番にやってくる。
客との間にd以上スペースがないとダメな場合の座り位置を出力する問題。
範囲外であれば、ある客との位置+dの位置を新たに候補にする。
その位置が他の客の範囲内であればcontinueしていく。
import java.util.ArrayList;
import java.util.Collections;
public class BearChairs {
public int[] findPositions(int[] atLeast, int d) {
int[] num = new int[atLeast.length];
ArrayListal = new ArrayList ();
for(int i = 0 ; i < atLeast.length ; i++){
int kouho = atLeast[i];
for(int j = 0 ; j < al.size() ; j++){
if(al.get(j) <= kouho - d || kouho + d <= al.get(j)){
continue;
}else if(kouho - d < al.get(j) || kouho + d > al.get(j)){
kouho = al.get(j) + d;
}
}
num[i] = kouho;
al.add(kouho);
Collections.sort(al);
}
return num;
}
}
hardは、いつもどおりよくわかんなかったので寝ました。
999 -> 1094と全体36位。順当に戻していく。
by ddrer-yossi | 2016-01-28 23:48 | TopCoder