Submission #102004

#TimeUsernameProblemLanguageResultExecution timeMemory
102004naoai이상적인 도시 (IOI12_city)C++14
34 / 100
1039 ms9032 KiB
#include <bits/stdc++.h> using namespace std; typedef long long i64; const int mod = 1e9; const int nmax = 1e5; const int dl[4] = {-1, 0, 0, 1}; const int dc[4] = {0, -1, 1, 0}; map<pair<int, int>, int> mp; queue<pair<int, int>> q; bool viz[2000 + 1]; int brut (int N, int *X, int *Y) { i64 ans = 0; for (int i = 0; i < N; ++ i) { memset(viz, 0, sizeof(viz)); q.push({i, 0}); viz[i] = 1; while (!q.empty()) { int x = q.front().first; int y = q.front().second; q.pop(); ans += y; for (int k = 0; k <4; ++ k) { int a = X[x] + dl[k], b = Y[x] + dc[k]; if (mp.find({a, b}) != mp.end()) { int t = mp[{a, b}]; if (viz[t] == 1) continue; viz[t] = 1; q.push({t, y + 1}); } } } } ans /= 2; return ans % mod; } i64 solve (vector<int> &v) { sort(v.begin(), v.end()); i64 ans = 0; i64 sum = 0; for (auto i : v) sum += i; i64 m = 0; for (int i = 0; i < v.size(); ++ i) { sum -= v[i]; ans += 1LL * v[i] * i - m + sum - 1LL * v[i] * (v.size() - 1 - i); m += v[i]; } return ans; } int DistanceSum(int N, int *X, int *Y) { for (int i = 0; i < N; ++ i) mp[{X[i], Y[i]}] = i; if (N <= 2000) { return brut(N, X, Y); } else { i64 ans = 0; vector<int> v; for (int i = 0; i < N; ++ i) v.push_back(X[i]); ans += solve(v); v.clear(); for (int i = 0; i < N; ++ i) v.push_back(Y[i]); ans += solve(v); return (ans / 2) % mod; } }

Compilation message (stderr)

city.cpp: In function 'i64 solve(std::vector<int>&)':
city.cpp:56:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < v.size(); ++ i) {
                     ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...