TopCoder SRM673

今日は家で仕事。お昼は適当に家のもので済ませる。
仕事が一段落ついたところで夕飯、そしてジムへ。
筋トレと30minとりあえずといったところ。

ゲーセンは恋は白帯、サンシローのLeggendariaをEXH
f0019846_14483673.jpg


To The Paradise(H)をフルコン。
f0019846_14491343.jpg


Clione Leggendariaを難
f0019846_14493051.jpg


リフレクはI'm so Happy SPECIALを93.9%に更新。
f0019846_1450495.jpg


そして夜はCodingがあるので早々に帰路へ。

easyは数字の配列があるが、その中で1回しか出ない数字がいくつあるかを求めるだけ。
愚直に全部数えて1個しかないものをカウント。

public class BearSong {

public int countRareNotes(int[] notes) {
int count = 0;
int[] nums = new int[1001];
for(int i = 0 ; i < notes.length ; i++){
nums[notes[i]]++;
}
for(int i = 0 ; i < nums.length ; i++){
if(nums[i] == 1)count++;
}
return count;
}

}


mediumは、数列をソートしたいが、
一番左端を除いた全部か、一番右端を除いた全部しかソートできないとき、
ソートに何回かかるかという問題。
実は最大でも3回しかかからないということに気づけば、
後は最小値、最大値がそれぞれ左、右にある場合で場合分けするだけでしたが、
自信がないので、念のため全部調べるようなものを書きました。それ故に遅くなってしまう。


import java.util.Arrays;

public class BearSlowlySorts {

public int minMoves(int[] w) {
if(issorted(w))return 0;
return Math.min(lst(w), rst(w));
}

public int[] sortleft(int[] raw){
int[] tesl = new int[raw.length];
for(int i = 0 ; i < raw.length - 1 ; i++){
tesl[i] = raw[i];
}
tesl[raw.length - 1] = 1001;
Arrays.sort(tesl);
tesl[raw.length - 1] = raw[raw.length -1];
return tesl;
}

public int[] sortright(int[] raw){
int[] tesr = new int[raw.length];
for(int i = 1 ; i < raw.length ; i++){
tesr[i] = raw[i];
}
tesr[0] = 0;
Arrays.sort(tesr);
tesr[0] = raw[0];
return tesr;
}

public boolean issorted(int[] w){
boolean isok = true;
for(int i = 0 ; i < w.length - 1 ; i++){
if(w[i] > w[i + 1]){
isok = false;
break;
}
}
return isok;
}

public int lst(int[] w){
int[] lsort = sortleft(w);
if(issorted(lsort))return 1;
int[] rsort = sortright(lsort);
if(issorted(rsort))return 2;
int[] tsort = sortleft(rsort);
if(issorted(tsort))return 3;
return 4;
}

public int rst(int[] w){
int[] rsort = sortright(w);
if(issorted(rsort))return 1;
int[] lsort = sortleft(rsort);
if(issorted(lsort))return 2;
int[] tsort = sortright(lsort);
if(issorted(tsort))return 3;
return 4;
}

}




hardは、Cartesian_treeを構成する順列の配置をすべて調べた時、
二分木となる部分の距離が得点となり、その部分の合計点を求める問題。
組合せ爆発が起こるので愚直はもちろん不可。
多分コンビネーションを使ってなんとかするんだろうなーと思いつつも疲れてしまい寝る。
起きてみたらChallengeが5分経っていました。潰せるものがあったのにもったいない。

1062 -> 1050 と、レーティングもいよいよ今年中に青復帰が怪しくなってきました。

  by ddrer-yossi | 2015-11-18 23:42 | TopCoder

<< ドーナツな日々。code_ 1... 飯も食わずにジムへ >>

SEM SKIN - DESIGN by SEM EXE