Submission #1206809

#TimeUsernameProblemLanguageResultExecution timeMemory
1206809TroySerRotating Lines (APIO25_rotate)C++20
5 / 100
3092 ms1588 KiB
#include "rotate.h" #include <vector> #include <bits/stdc++.h> using namespace std; using ll = long long; const ll FULL_ROTATION = 50000; ll energyCalc(vector<int> v) { ll totCost = 0; for (ll i = 0; i < v.size(); i++) { for (ll j = i + 1; j < v.size(); j++) { totCost += min((ll)abs(v[i] - v[j]), FULL_ROTATION - abs(v[i] - v[j])); } } return totCost; } void energy(int N, std::vector<int> v) { ll globalBest = 0; vector<pair<ll, ll> > instructions; for (ll currAngle = 0; currAngle < FULL_ROTATION; currAngle++) { ll currAlternative = currAngle + FULL_ROTATION/2; ll currEnergy = energyCalc(v); vector<int> currV; currV.reserve(N); for (ll i = 0; i < N; i++) currV.push_back(v[i]); vector<pair<ll, ll> > currentInstructions; for (ll currRod = 0; currRod < N; currRod++) { ll tmp = currV[currRod]; currV[currRod] = currAngle; ll energyIncreaseAngle = energyCalc(currV); currV[currRod] = tmp; currV[currRod] = currAlternative; ll energyIncreaseAlt = energyCalc(currV); currV[currRod] = tmp; if (max(energyIncreaseAlt, energyIncreaseAngle) < currEnergy) continue; if (energyIncreaseAngle >= energyIncreaseAlt) { currentInstructions.push_back({currRod, currAngle - tmp}); currV[currRod] = currAngle; currEnergy = energyIncreaseAngle; } else { currentInstructions.push_back({currRod, currAlternative - tmp}); currV[currRod] = currAlternative; currEnergy = energyIncreaseAlt; } } ll finalEnergy = energyCalc(currV); if (finalEnergy > globalBest) { globalBest = finalEnergy; instructions = currentInstructions; } } for (auto &instruct: instructions) { vector<int> theRod; theRod.push_back(instruct.first); rotate(theRod, instruct.second); } // rotate({0, 1}, 1500); // rotate({1}, 25); }
#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...