[USACO21FEB] Comfortable Cows S

2024-01-14 20:31:13 浏览数 (2)

大家好!我是小码匠。

最近要准备期末考试,晚上到家先要搞1小时文化课。

这道题昨晚上就开始搞了,先是有一个大胆的奇思妙想的想法(当时就感觉有些不靠谱[{(>_<)]})。

老码农提前看了题解,当时就质疑我的想法,但他没叫停我。

我搞到10点40分,结果样例没过去。然后我开始画图推导,发现确思路有问题。

今天晚上回来,直接就开始DFS了。

其实这道题我的思路没问题,但码力方面还是有些不够。

后来看了题解,理解之后,第一次提交又犯了个很愚蠢的错误,少走了一遍DFS,第2次提交A掉了。

思路我就不写了,参照题解区第一个大佬的思路。

分享下我的代码:

代码语言:javascript复制
#include <bits/stdc  .h>

using namespace std;
const int MAX_NUM = 5005;
bool have_cow[MAX_NUM][MAX_NUM];
int cow[MAX_NUM][MAX_NUM], ans;

int cx[4] = {0, 0, 1, -1};
int cy[4] = {1, -1, 0, 0};

pair<int, int> check(int x, int y) {
    for (int i = 0; i < 4;   i) {
        if (!have_cow[x   cx[i]][y   cy[i]]) {
            return {x   cx[i], y   cy[i]};
        }
    }
}

void dfs(int x, int y) {
    if (!have_cow[x][y]) {
        return;
    }
    int cnt = 0;
    for (int i = 0; i < 4;   i) {
        if (have_cow[x   cx[i]][y   cy[i]]) {
              cnt;
        }
    }

    if (cnt == 3) {
        pair<int, int> k = check(x, y);
        have_cow[k.first][k.second] = true;
          ans;
        dfs(k.first, k.second);
        for (int i = 0; i < 4;   i) {
            dfs(k.first   cx[i], k.second   cy[i]);
        }
    }
}

void best_coder() {
    int n;
    cin >> n;
    for (int i = 0; i < n;   i) {
        int x, y;
        cin >> x >> y;
        x  = 1000;
        y  = 1000;
        if (have_cow[x][y]) {
            --ans;
            cout << ans << 'n';
            continue;
        }
        have_cow[x][y] = true;
        dfs(x, y);
        for (int j = 0; j < 4;   j) {
            dfs(x   cx[j], y   cy[j]);
        }
        cout << ans << 'n';
    }
}

void happy_coder() {

}

int main() {
    // 提升cin、cout效率
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    // 小码匠
    best_coder();

    // 最优解
    // happy_coder();

    return 0;
}

困了,我要去睡觉了。

0 人点赞