제출 #1204987

#제출 시각아이디문제언어결과실행 시간메모리
1204987avighnaRotating Lines (APIO25_rotate)C++20
24 / 100
3094 ms2752 KiB
#include <bits/stdc++.h> void rotate(std::vector<int> t, int x); void energy(int n, std::vector<int> v) { if (n == 2) { if (v[0] < v[1]) { rotate({1}, 25000 - (v[1] - v[0])); } else { rotate({0}, 25000 - (v[0] - v[1])); } return; } if (*std::max_element(v.begin(), v.end()) < 25000) { std::vector<std::pair<int, int>> c; for (int i = 0; i < n; ++i) { c.push_back({v[i], i}); } std::sort(c.begin(), c.end()); int cur = 0; for (auto &[v, i] : c) { if (cur++ < n / 2) { rotate({i}, -v); } else { rotate({i}, 25000 - v); } } return; } auto get_energy = [&]() { int ans = 0; for (int i = 0; i < n; ++i) { for (int j = i + 1; j < n; ++j) { int c = std::abs(v[i] - v[j]); ans += std::min(c, 50000 - c); } } return ans; }; int e = get_energy(); while (true) { std::pair<int, std::pair<int, int>> best = {-1, {-1, -1}}; for (int i = 0; i < n; ++i) { for (int j = 0; j < 50000; ++j) { int cur_e = e; int del = j - v[i]; for (int k = 0; k < n; ++k) { int c = std::abs(v[i] - v[k]); cur_e -= std::min(c, 50000 - c); } v[i] += del; for (int k = 0; k < n; ++k) { int c = std::abs(v[i] - v[k]); cur_e += std::min(c, 50000 - c); } best = std::max(best, {cur_e, {i, del}}); v[i] -= del; } } if (best.first <= e) { break; } e = best.first; v[best.second.first] += best.second.second; rotate({best.second.first}, best.second.second); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...