大家好!我是小码匠。
最近要准备期末考试,晚上到家先要搞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;
}
困了,我要去睡觉了。