老师问我为什么盯着屏幕看ACGO这么久
2025-08-26 17:36:06
发布于:上海
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
constexpr int dirs[][2] {0, 1, 1, 0, 0, -1, -1, 0};
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n, m;
cin >> n >> m;
vector<string> grid(n);
for (auto &row : grid)
cin >> row;
vector<vector<int>> color(n, vector<int>(m));
int k = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (grid[i][j] != 'B' or color[i][j]) continue;
queue<pair<int, int>> q;
q.emplace(i, j);
color[i][j] = ++k;
while (!q.empty()) {
auto [r, c] = q.front(); q.pop();
for (auto &[dr, dc] : dirs) {
int nr = r + dr, nc = c + dc;
if (nr < 0 or nr >= n or nc < 0 or nc >= m) continue;
if (grid[nr][nc] != 'B' or color[nr][nc]) continue;
color[nr][nc] = color[r][c];
q.emplace(nr, nc);
}
}
}
}
i64 a = 0, b = 0;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j) {
if (grid[i][j] != 'W') continue;
set<int> st;
for (auto &[dr, dc] : dirs) {
int nr = i + dr, nc = j + dc;
if (nr < 0 or nr >= n or nc < 0 or nc >= m) continue;
if (grid[nr][nc] == 'W') continue;
st.insert(color[nr][nc]);
}
a += k - st.size() + 1;
b += 1;
}
cout << setprecision(12) << fixed << a * 1.0 / b << '\n';
return 0;
}
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
constexpr int dirs[][2] {0, 1, 1, 0, 0, -1, -1, 0};
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n, m;
cin >> n >> m;
vector<string> grid(n);
for (auto &row : grid)
cin >> row;
vector<vector<int>> color(n, vector<int>(m));
int k = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (grid[i][j] != 'B' or color[i][j]) continue;
queue<pair<int, int>> q;
q.emplace(i, j);
color[i][j] = ++k;
while (!q.empty()) {
auto [r, c] = q.front(); q.pop();
for (auto &[dr, dc] : dirs) {
int nr = r + dr, nc = c + dc;
if (nr < 0 or nr >= n or nc < 0 or nc >= m) continue;
if (grid[nr][nc] != 'B' or color[nr][nc]) continue;
color[nr][nc] = color[r][c];
q.emplace(nr, nc);
}
}
}
}
i64 a = 0, b = 0;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j) {
if (grid[i][j] != 'W') continue;
set<int> st;
for (auto &[dr, dc] : dirs) {
int nr = i + dr, nc = j + dc;
if (nr < 0 or nr >= n or nc < 0 or nc >= m) continue;
if (grid[nr][nc] == 'W') continue;
st.insert(color[nr][nc]);
}
a += k - st.size() + 1;
b += 1;
}
cout << setprecision(12) << fixed << a * 1.0 / b << '\n';
return 0;
}
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
constexpr int dirs[][2] {0, 1, 1, 0, 0, -1, -1, 0};
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n, m;
cin >> n >> m;
vector<string> grid(n);
for (auto &row : grid)
cin >> row;
vector<vector<int>> color(n, vector<int>(m));
int k = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (grid[i][j] != 'B' or color[i][j]) continue;
queue<pair<int, int>> q;
q.emplace(i, j);
color[i][j] = ++k;
while (!q.empty()) {
auto [r, c] = q.front(); q.pop();
for (auto &[dr, dc] : dirs) {
int nr = r + dr, nc = c + dc;
if (nr < 0 or nr >= n or nc < 0 or nc >= m) continue;
if (grid[nr][nc] != 'B' or color[nr][nc]) continue;
color[nr][nc] = color[r][c];
q.emplace(nr, nc);
}
}
}
}
i64 a = 0, b = 0;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j) {
if (grid[i][j] != 'W') continue;
set<int> st;
for (auto &[dr, dc] : dirs) {
int nr = i + dr, nc = j + dc;
if (nr < 0 or nr >= n or nc < 0 or nc >= m) continue;
if (grid[nr][nc] == 'W') continue;
st.insert(color[nr][nc]);
}
a += k - st.size() + 1;
b += 1;
}
cout << setprecision(12) << fixed << a * 1.0 / b << '\n';
return 0;
}
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
constexpr int dirs[][2] {0, 1, 1, 0, 0, -1, -1, 0};
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n, m;
cin >> n >> m;
vector<string> grid(n);
for (auto &row : grid)
cin >> row;
vector<vector<int>> color(n, vector<int>(m));
int k = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (grid[i][j] != 'B' or color[i][j]) continue;
queue<pair<int, int>> q;
q.emplace(i, j);
color[i][j] = ++k;
while (!q.empty()) {
auto [r, c] = q.front(); q.pop();
for (auto &[dr, dc] : dirs) {
int nr = r + dr, nc = c + dc;
if (nr < 0 or nr >= n or nc < 0 or nc >= m) continue;
if (grid[nr][nc] != 'B' or color[nr][nc]) continue;
color[nr][nc] = color[r][c];
q.emplace(nr, nc);
}
}
}
}
i64 a = 0, b = 0;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j) {
if (grid[i][j] != 'W') continue;
set<int> st;
for (auto &[dr, dc] : dirs) {
int nr = i + dr, nc = j + dc;
if (nr < 0 or nr >= n or nc < 0 or nc >= m) continue;
if (grid[nr][nc] == 'W') continue;
st.insert(color[nr][nc]);
}
a += k - st.size() + 1;
b += 1;
}
cout << setprecision(12) << fixed << a * 1.0 / b << '\n';
return 0;
}
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
constexpr int dirs[][2] {0, 1, 1, 0, 0, -1, -1, 0};
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n, m;
cin >> n >> m;
vector<string> grid(n);
for (auto &row : grid)
cin >> row;
vector<vector<int>> color(n, vector<int>(m));
int k = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (grid[i][j] != 'B' or color[i][j]) continue;
queue<pair<int, int>> q;
q.emplace(i, j);
color[i][j] = ++k;
while (!q.empty()) {
auto [r, c] = q.front(); q.pop();
for (auto &[dr, dc] : dirs) {
int nr = r + dr, nc = c + dc;
if (nr < 0 or nr >= n or nc < 0 or nc >= m) continue;
if (grid[nr][nc] != 'B' or color[nr][nc]) continue;
color[nr][nc] = color[r][c];
q.emplace(nr, nc);
}
}
}
}
i64 a = 0, b = 0;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j) {
if (grid[i][j] != 'W') continue;
set<int> st;
for (auto &[dr, dc] : dirs) {
int nr = i + dr, nc = j + dc;
if (nr < 0 or nr >= n or nc < 0 or nc >= m) continue;
if (grid[nr][nc] == 'W') continue;
st.insert(color[nr][nc]);
}
a += k - st.size() + 1;
b += 1;
}
cout << setprecision(12) << fixed << a * 1.0 / b << '\n';
return 0;
}
这里空空如也
有帮助,赞一个