Hatena::Grouptopcoder

yaottiの日記

2010-03-08

SRM 156 DIV2

| 22:58

easy

DiskSpace.cpp

score: 231/250(8mins)

こんな問題に8分もかけるなんて…

reverse_sortみたいなのあるかと思って探したけどなかったのでsortして後ろから見ていったけど,解き終えてからreverseというのがあることを知った.

normal

BombSweeper.cpp

180/600(31mins)

system test落ちまくり.正方形だと勝手に解釈していたせいで時間がかかった…

勘違いは気をつけるしかないとしても,

勘違いが影響しているロジック全てを直さずにちょっとずつ直す→システムテスト通らない!→再びチェック,を繰り返したのは駄目だ.


以下ソース

easy

class DiskSpace {

public:

int minDrives(vector <int> used, vector <int> total) {

sort(ALL(total));

int usedSize = accumulate(ALL(used), 0);

int len = total.size();

int j = 0;

for (int i = 0; i < len; i++) {

usedSize-=total[len-i-1];

j++;

if (usedSize <= 0) break;

}

return j;

}

}

normal

class BombSweeper {
public:
    double winPercentage(vector <string> board) {
        int win = 0;
        int lose = 0;
        int len = board.size();
        int len2 = board[0].size();
        if (len == 1 && len2 == 1) {
            double res = board[0][0] == 'B' ? 0 : 1;
            return res;
        }
        LP(board) {
            Lj(board[i]) {
                if (board[i][j] == 'B') {
                    lose++;
                    continue;
                }
                int i1 = i;
                int j1 = j;
                if (i1 == 0) i1++;
                if (j1 == 0) j1++;
                if (board[i1-1][j1-1] == 'B' ||
                    board[i1-1][j] == 'B' ||
                    board[i][j1-1] == 'B') continue;
                int i2 = i;
                int j2 = j;
                if (i2 == len-1) i2--;
                if (j2 == len2-1) j2--;
                if (board[i1-1][j2+1] == 'B' ||
                    board[i][j2+1] == 'B' ||
                    board[i2+1][j1-1] == 'B' ||
                    board[i2+1][j] == 'B' ||
                    board[i2+1][j2+1] == 'B') continue;
                win++;
            }
        }
        return (double)win/(win+lose)*100;
    }
}

ゲスト



トラックバック - http://topcoder.g.hatena.ne.jp/yaotti/20100308