SSブログ

2011年JOI予選問5 [コンテスト]

Cユーザーはキューに嫌われています!!! (意訳:循環キューが上手く動かなかった)
dfs可愛いですよねっ.

短く書けました.これは気づくか気づかないか、ですね.
#include <stdio.h>
#include <string.h>

int x, y;
const int dx[2][6] = {{-1, -1, -1, 0, 1, 0}, {0, -1, 0, 1, 1, 1}};
const int dy[2][6] = {{-1, 0, 1, -1, 0, 1}, {-1, 0, 1, -1, 0, 1}};
void paint(int ty, int tx, int map[102][102]){
    int my, mx;
    int i, j;
    
    map[ty][tx] = 2;
    
    for (i = 0; i < 6; i++){
        mx = tx + dx[ty % 2][i];
        my = ty + dy[ty % 2][i];
        if (0 <= mx && mx <= x + 1 && 0 <= my && my <= y + 1 && map[my][mx] == 0){
            paint(my, mx, map);
        }
    }
}

int main(void)
{
    int map[102][102];
    int mx, my;
    int i, j, k;
    int ans;
    
    scanf("%d%d", &x, &y);
    
    memset(map, 0, sizeof(map));
    for (i = 1; i <= y; i++){
        for (j = 1; j <= x; j++){
            scanf("%d", &map[i][j]);
        }
    }
    
    paint(0, 0, map);
    
    ans = 0;
    for (i = 1; i <= y; i++){
        for (j = 1; j <= x; j++){
            if (map[i][j] == 1){
                for (k = 0; k < 6; k++){
                    if (map[i + dy[i % 2][k]][j + dx[i % 2][k]] == 2){
                        ans++;
                    }
                }
            }
        }
    }
    
    printf("%d\n", ans);
    
    return (0);
}

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

AOJ 0537: BingoAOJ 0539: Pizza ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。