Run ID 作者 问题 语言 测评结果 时间 内存 代码长度 提交时间
83048 sh25_shenpy Comfortable Cows C++ 通过 29 MS 5228 KB 2178 2026-01-20 19:09:48

Tests(12/12):


#include <iostream> #include <vector> using namespace std; // 坐标范围 0-1000,数组大小设为 1001*1001 足够 const int MAX_COORD = 1001; // grid[x][y] = 1 表示该位置有奶牛,0 表示无 bool grid[MAX_COORD][MAX_COORD] = {false}; // cnt[x][y] 表示 (x,y) 位置的奶牛的上下左右邻居数量 int cnt[MAX_COORD][MAX_COORD] = {0}; // 4个方向:上、下、左、右 int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int main() { ios::sync_with_stdio(false); // 加速输入输出,应对 1e5 数据量 cin.tie(nullptr); int N; cin >> N; int total = 0; // 当前舒适的奶牛总数 for (int i = 0; i < N; ++i) { int x, y; cin >> x >> y; // 步骤1:更新当前坐标的4个邻居的 cnt 和 total for (auto& dir : dirs) { int nx = x + dir[0]; int ny = y + dir[1]; // 坐标合法且该邻居已有奶牛 if (nx >= 0 && nx < MAX_COORD && ny >= 0 && ny < MAX_COORD && grid[nx][ny]) { // 先检查更新前是否是舒适的,若是则总数减1 if (cnt[nx][ny] == 3) { total--; } // 邻居数加1 cnt[nx][ny]++; // 检查更新后是否是舒适的,若是则总数加1 if (cnt[nx][ny] == 3) { total++; } } } // 步骤2:标记当前坐标有奶牛,并计算其初始邻居数 grid[x][y] = true; int neighbor = 0; for (auto& dir : dirs) { int nx = x + dir[0]; int ny = y + dir[1]; if (nx >= 0 && nx < MAX_COORD && ny >= 0 && ny < MAX_COORD && grid[nx][ny]) { neighbor++; } } cnt[x][y] = neighbor; // 步骤3:检查当前奶牛是否是舒适的,若是则总数加1 if (neighbor == 3) { total++; } // 输出当前总数 cout << total << '\n'; } return 0; }


测评信息: