#include <bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for (int i = a; i < b; i++)
#define pb push_back
#define trace(x) for (auto &a : x) cout << a << " ";
const int MOD = 1'000'000'000;
int n;
vector<int> x, y;
map<pair<int, int>, int> nmap;
vector<vector<int>> adj;
int pairs = 0;
int bfs_sum(int node) {
int ans = 0;
int lpairs = 0;
set<int> vis;
vector<int> dist(n, 0);
queue<int> q; q.push(node);
while (!q.empty()) {
int cur = q.front();
q.pop();
vis.insert(cur);
for (int nei : adj[cur]) {
if (vis.count(nei)) continue;
dist[nei] = dist[cur] + 1;
q.push(nei);
}
}
FOR(i, 0, n) {
if (i == node) continue;
ans += dist[i];
lpairs++;
pairs++;
}
return ans;
}
int DistanceSum(int _N, int *_X, int *_Y) {
n = _N;
x.resize(0); y.resize(0);
adj.assign(n, vector<int>());
for (int i = 0; i < n; i++) x.pb(_X[i]), y.pb(_Y[i]);
FOR(i, 0, n) {
nmap[{x[i], y[i]}] = i;
}
FOR(i, 0, n) {
FOR(dx, -1, 2) {
FOR(dy, -1, 2) {
if (abs(dx) == abs(dy)) continue;
if (!nmap.count({x[i] + dx, y[i] + dy})) continue;
adj[i].pb(nmap[{x[i] + dx, y[i] + dy}]);
}
}
}
int ans = 0;
FOR(i, 0, n) {
ans += bfs_sum(i);
}
return ans / 2;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |