読者です 読者をやめる 読者になる 読者になる

LoL/LJL好きのエンジニアのブログ

技術的な話やら、最近はLoLやLJLの話など。

AOJ 1193: 連鎖消滅パズル (Chain Disappearance Puzzle)

問題

ぷよぷよチックなやつのシミュレーションをする問題。「やるだけ」っていうやつ。

ソースコード主要部分

int main(int argc, const char * argv[]){
    while(true){
        int h;
        cin >> h;
        if(h == 0) return 0;
        
        int table[10][5], table_cp[10][5];
        REP(i,h) REP(j,5){
            cin >> table[i][j];
        }
        
        bool flag = true;
        int ans = 0;
        while(flag){
            // 配列のコピー
            REP(i,h){
                REP(j,5){
                    table_cp[i][j] = table[i][j];
                }
            }
            
            // 消滅判定
            flag = false;
            RREP(i,h){
                FOR(j,1,4){
                    if(table[i][j] && table[i][j-1] == table[i][j] && table[i][j] == table[i][j+1]){
                        flag = true; // 消えた場合は次のループへ
                        table_cp[i][j-1] = 0;
                        table_cp[i][j] = 0;
                        table_cp[i][j+1] = 0;
                    }
                }
            }
            
            // 得点計算
            REP(i,h){
                REP(j,5){
                    ans += table[i][j] - table_cp[i][j];
                }
            }
            
            // 穴埋め
            REP(i,h){
                for(int i = h-1; i > 0; i--){
                    REP(j,5){
                        if(table_cp[i][j] == 0){
                            table_cp[i][j] = table_cp[i-1][j];
                            table_cp[i-1][j] = 0;
                        }
                    }
                }
            }
            
            // 配列のコピー
            REP(i,h){
                REP(j,5){
                    table[i][j] = table_cp[i][j];
                }
            }
        }
        cout << ans << endl;
    }
}

穴埋めの部分とか明らかに糞コードだけど、オーダー的に間に合う中で実装が早いのを選択した結果

余談

AOJのインタフェース変わったんですね。しかし、提出しようとしたら f:id:yoshiki_utakata:20150520001356p:plain

問題解いてる時間の間にログアウトされてしましました。 f:id:yoshiki_utakata:20150520001402p:plain

更新連打しなくてもjudge結果が返ってくるのがすばらしいです。yukicoderもこの仕様になってたので、AtCoderもこれにならないかなぁ f:id:yoshiki_utakata:20150520001415p:plain