poj-1120

7 篇文章 0 订阅
//408K  16MS    G++
#include <cstdio>
#include <cstring>

using namespace std;

int dish[20][20];
int K[20][20];

int D[16];

int days;

int getDensitySum(int rowId, int columnId) {
    int K = 0;
    K += dish[rowId][columnId];
    if (rowId > 0) {
        K += dish[rowId-1][columnId];
    }
    if (rowId < 19) {
        K += dish[rowId+1][columnId];
    }
    if (columnId > 0) {
        K += dish[rowId][columnId - 1];
    }
    if (columnId < 19) {
        K += dish[rowId][columnId + 1];
    }
    return K;
}

void simulate() {

    for (int rowId = 0; rowId < 20; rowId++) {
        for (int columnId = 0; columnId < 20; columnId++) {
            K[rowId][columnId] = getDensitySum(rowId, columnId);
        }
    }

    for (int rowId = 0; rowId < 20; rowId++) {
        for (int columnId = 0; columnId < 20; columnId++) {
            dish[rowId][columnId] += D[K[rowId][columnId]];
            if (dish[rowId][columnId] > 3) {
                dish[rowId][columnId] = 3;
            } else if (dish[rowId][columnId] < 0) {
                dish[rowId][columnId] = 0;
            }
        }
    }
}

void solve() {
    for (int i = 1; i <= days; i++) {
        simulate();
    }
    for (int rowId = 0; rowId < 20; rowId++) {
        for (int columnId = 0; columnId < 20; columnId++) {
            char c = '.';
            if (dish[rowId][columnId] == 1) {
                c = '!';
            } else if (dish[rowId][columnId] == 2) {
                c = 'X';
            } else if (dish[rowId][columnId] == 3) {
                c = '#';
            }
            if (columnId < 19) {
                printf("%c", c);
            } else if (columnId == 19) {
                printf("%c\n", c);
            }
        }
    }
}

int main() {
    scanf("%d", &days);
    for (int i = 0; i < 16; i++) {
        scanf("%d", &D[i]);
    }
    for (int rowId = 0; rowId < 20; rowId++) {
        for (int columnId = 0; columnId < 20; columnId++) {
            scanf("%d", &dish[rowId][columnId]);
        }
    }

    solve();
}

模拟水题,注意最后输出格子之间是没有空格.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值