This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define fi first
#define se second
#define int long long
#define inf (1LL << 60)
using namespace std;
const int N = 1e5+1;
typedef pair<int, int> pii;
int d[N];
int f(int l, int r, int x){
if(x < l) return l - x;
if(x > r) return x - r;
return 0;
}
int32_t main(){
int k, n;
cin >> k >> n;
vector<pii> A;
int add = 0;
for(int i = 0; i < n; i++){
char c1, c2; int p1, p2;
cin >> c1 >> p1 >> c2 >> p2;
add += abs(p2 - p1);
if(c1 != c2) add++, A.push_back({min(p1, p2), max(p1, p2)});
}
int ans1 = 0, c1 = 0, p1 = 0, ans = 0, ans2 = inf;
for(int i = 0; i < A.size(); i++){
c1 += A[i].fi * 2;
}
ans1 = c1;
int l = 0, r = A.size();
vector<int> q;
for(int i = 0; i < A.size(); i++){
q.push_back(A[i].fi);
q.push_back(A[i].se);
}
sort(q.begin(), q.end());
for(int i = 0; i < A.size() * 2; i++){
c1 += (q[i] - p1) * (l - r) * 2;
p1 = q[i];
ans1 = min(ans1, c1);
r--;
}
if(k == 1){
cout << add + ans1 << endl;
return 0;
}
ans = add + ans1;
n = A.size() * 2, k = A.size();
for(int x1 = 0; x1 < n; x1++){
for(int x2 = x1; x2 < n; x2++){
int res = 0;
for(int i = 0; i < k; i++){
int f1 = f(A[i].fi, A[i].se, q[x1]), f2 = f(A[i].fi, A[i].se, q[x2]);
res += min(f1, f2);
}
ans2 = min(ans2, res * 2);
}
}
ans = min(ans, add + ans2);
cout << ans << endl;
}
Compilation message (stderr)
bridge.cpp: In function 'int32_t main()':
bridge.cpp:31:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
31 | for(int i = 0; i < A.size(); i++){
| ~~^~~~~~~~~~
bridge.cpp:37:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
37 | for(int i = 0; i < A.size(); i++){
| ~~^~~~~~~~~~
bridge.cpp:42:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
42 | for(int i = 0; i < A.size() * 2; i++){
| ~~^~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |