前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[USACO21FEB] Comfortable Cows S

[USACO21FEB] Comfortable Cows S

作者头像
小码匠
发布2024-01-14 20:31:13
790
发布2024-01-14 20:31:13
举报

大家好!我是小码匠。

最近要准备期末考试,晚上到家先要搞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;
}

困了,我要去睡觉了。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-11,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 小码匠和老码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com