Pagini recente » Cod sursa (job #3222417) | Cod sursa (job #326189) | Cod sursa (job #3287793) | Cod sursa (job #236251) | Cod sursa (job #3253037)
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
#include <cmath>
#include <fstream>
using namespace std;
int calculate_min_time(const vector<int>& drinks, int N) {
vector<int> sorted_drinks = drinks;
sort(sorted_drinks.begin(), sorted_drinks.end());
int min_time = INT_MAX;
for (int start = 0; start < N; ++start) {
int current_time = 0;
vector<bool> used(N, false);
for (int i = 0; i < N; ++i) {
int target_value = sorted_drinks[(start + i) % N];
int current_pos = -1;
for (int j = 0; j < N; ++j) {
if (drinks[j] == target_value && !used[j]) {
current_pos = j;
used[j] = true; // Marcare pahar folosit
break;
}
}
if (current_pos != -1) {
int target_pos = (start + i) % N;
int distance = min(abs(target_pos - current_pos), N - abs(target_pos - current_pos));
current_time += distance + 20;
}
}
min_time = min(min_time, current_time);
}
return min_time;
}
int main() {
ifstream fin("barman.in");
ofstream fout("barman.out");
int N;
fin >> N;
vector<int> drinks(N);
for (int i = 0; i < N; ++i) {
fin >> drinks[i];
}
int result = calculate_min_time(drinks, N);
fout << result << "\n";
fin.close();
fout.close();
return 0;
}