제출 #375470

#제출 시각아이디문제언어결과실행 시간메모리
375470wind_reaperPalembang Bridges (APIO15_bridge)C++17
0 / 100
1 ms492 KiB
#include <bits/stdc++.h> using namespace std; const int64_t INF = 1e18; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int K, n; cin >> K >> n; int N = 0; int64_t ans = 0; vector<array<int, 2>> v; vector<int64_t> next; for(int i = 0; i < n; i++){ char s, d; int st, dt; cin >> s >> st >> d >> dt; ans += int64_t(abs(dt - st)); if(s == d) continue; if(st > dt) swap(st, dt); v.push_back({st, dt}); next.push_back(st), next.push_back(dt); N++; } n = N; sort(v.begin(), v.end()); sort(next.begin(), next.end()); int64_t inc = INF; for(int i = 0; i < 2*N; i++){ for(int j = i+1; j < 2*N; j++){ int64_t temp = 0; for(int k = 0; k < N; k++){ if((v[k][0] <= next[i] && v[k][1] >= next[i]) || (v[k][0] <= next[j] && v[k][1] >= next[i])) continue; int64_t tmp = INF; if(next[i] < v[k][0]) tmp = min(tmp, v[k][0] - next[i]); if(next[i] > v[k][1]) tmp = min(tmp, next[i] - v[k][1]); if(next[j] < v[k][0]) tmp = min(tmp, v[k][0] - next[j]); if(next[j] > v[k][1]) tmp = min(tmp, next[j] - v[k][1]); temp += tmp; } inc = min(inc, temp); } } cout << ans + inc + N << '\n'; return 0; }
#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...