TopCoder SRM 517

9.11といえばテロです。10年経ったんですね。
東日本大震災から6ヶ月とも言えるでしょう。

今日は1時早々にTopCoderでした。
とはいえ、完全に寝起きで、起きた時に0:52で焦ってRegisterしたのは内緒です。
というわけで、あんまりコンディションの良くない状態、寝起きTopCoderとなりました。

1問目は、白一面のタイルを、完成形のように塗りつぶすには、
ラインを最小何回塗りつぶすのが良いかということ。
横か縦かで塗りつぶせる。つまり

BWB
BBB
BWB ならば、1列目と3列目、2行目を塗りつぶす必要があるので3となる。

BB
BB
BB ならば、1列目と2列目を塗りつぶす必要があるので2となる。

ちなみに確実に塗りつぶせるパターンしか存在しないという保証がある。
この保証なくてもいける気がするんだけど、まあ簡単にしたということなのかな。

とはいえ、問題を読み取るのに苦戦し、解くのにも結局苦戦した。
それゆえにコードもぐだぐだ。正直関数で分けたほうがずっときれいだし早く解ける。

public class MonochromaticBoard{
public int theMin(String[] board){
int c = board.length;
int r = board[0].length();
int max = Math.max(c,r);
int min = Math.min(c,r);
int count = 0;
if(max == c){
for(int i = 0 ; i < r ; i++){
int tc = 0;
for(int j = 0 ; j < c ; j++){
if(board[j].charAt(i) == 'B'){
tc++;
}else{
break;
}
}
if(tc == board.length){
count++;
}
}
if(count == board[0].length()){
return count;
}

for(int j = 0 ; j < c ; j++){
int tc = 0;
for(int i = 0 ; i < r ; i++){
if(board[j].charAt(i) =='B'){
tc++;
}else{
break;
}
}
if(tc == board[j].length()){
count++;
}
}
}else if(max == r){
for(int i = 0 ; i < c ; i++){
int tc = 0;
for(int j = 0 ; j < r ; j++){
if(board[i].charAt(j) =='B'){
tc++;
}else{
break;
}
}
if(tc == board[i].length()){
count++;
}
}

if(count == board.length){
return count;
}
for(int j = 0 ; j < r ; j++){
int tc = 0;
for(int i = 0 ; i < c ; i++){
if(board[i].charAt(j) =='B'){
tc++;
}else{
break;
}
}
if(tc == board.length){
count++;
}
}
}
return count;
}
}

一応通った。
1問目に50分かけたので、2問目を解く時間はなかった。

ChallengePhaseは明らかに通らないものを2つ潰した。久々である。
というか問題の得点よりチャレンジの得点が高くなった。

レーティングも漸く700付近まで戻り始めた。後500。

TopCoderな記事はそれぐらいにして、
本日はディジタル回路について続きを学んだ。
Dフリップフロップと、JKフリップフロップの動作と仕組みについて理解した。
いつか電子工作もやりたいね。マイコンも一種のコンピュータですもんね。
Cでプログラミングできるみたいだし。アセンブラでもok。

DDRも定期ということでやってきました。それなりでしょうか。

TopCoder SRM 517_f0019846_013413.jpg


ジャグリングは不調です。5ボールカスケード248回が限度でした。

  by ddrer-yossi | 2011-09-11 23:05 | TopCoder

<< 日記をちゃんと書かないと 函館の学会5日目 >>

SEM SKIN - DESIGN by SEM EXE