Submission #103864

#TimeUsernameProblemLanguageResultExecution timeMemory
103864E869120Palembang Bridges (APIO15_bridge)C++14
31 / 100
2050 ms16084 KiB
#include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; long long K, N, M, L[100009], R[100009], cnt; long long solve_1() { vector<long long>X; map<long long, long long>Map; for (int i = 0; i < M; i++) { X.push_back(L[i]); X.push_back(R[i]); Map[L[i]] += 2; Map[R[i]] += 2; } sort(X.begin(), X.end()); X.erase(unique(X.begin(), X.end()), X.end()); long long cx = 0, sum = 0, minx = (1LL << 60), dep = -M * 2; for (int i = 0; i < M; i++) sum += L[i] + R[i]; minx = min(minx, sum); for (int i = 0; i < X.size(); i++) { sum += (X[i] - cx) * dep; minx = min(minx, sum); dep += Map[X[i]]; cx = X[i]; } return minx; } long long solve_val(long long val) { vector<long long>X; map<long long, long long>Map; for (int i = 0; i < M; i++) { if (val < L[i] || R[i] < val) { long long E = min(abs(L[i] - val), abs(val - R[i])); X.push_back(L[i] - E); Map[L[i] - E] -= 2; X.push_back(R[i] + E); Map[R[i] + E] -= 2; X.push_back(L[i]); Map[L[i]] += 2; X.push_back(R[i]); Map[R[i]] += 2; } } sort(X.begin(), X.end()); X.erase(unique(X.begin(), X.end()), X.end()); long long cx = -2000000000LL, sum = 0, minx = (1LL << 60), dep = 0; for (int i = 0; i < M; i++) sum += abs(L[i] - val) + abs(R[i] - val); minx = min(minx, sum); for (int i = 0; i < X.size(); i++) { sum += (X[i] - cx) * dep; minx = min(minx, sum); dep += Map[X[i]]; cx = X[i]; } return minx; } long long solve_2() { long long ans = solve_1(); for (int i = 0; i < M; i++) { ans = min(ans, solve_val(L[i])); ans = min(ans, solve_val(R[i])); } return ans; } int main() { cin >> K >> N; for (int i = 0; i < N; i++) { char c1, c2; int cl, cr; cin >> c1 >> cl >> c2 >> cr; if (c1 != c2) { if (cl > cr) swap(cl, cr); L[M] = cl; R[M] = cr; cnt++; M++; } else cnt += 1LL * abs(cl - cr); } if (K == 1) { cout << solve_1() + cnt << endl; } if (K == 2) { cout << solve_2() + cnt << endl; } return 0; }

Compilation message (stderr)

bridge.cpp: In function 'long long int solve_1()':
bridge.cpp:23:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < X.size(); i++) {
                  ~~^~~~~~~~~~
bridge.cpp: In function 'long long int solve_val(long long int)':
bridge.cpp:50:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < X.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...
#Verdict Execution timeMemoryGrader output
Fetching results...