Advertisement
tepyotin2

Untitled

Jul 8th, 2023
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. bool isDiag = false;
  5. long pref[100001];
  6. vector<pair<int, int>> listV;
  7. int N ;
  8. int ans = INT_MAX;
  9. int cal(int x1, int y1, int x2,  int y2){
  10.     int res = abs(x1 - x2) + abs(y1-y2);
  11.     return res;
  12. }
  13. int main(){
  14.     //isDiag = true;
  15.     if (isDiag)
  16.     {
  17.         //marathon_bronze
  18.         freopen(  "marathon_bronze/4.in", "r", stdin);
  19.     }else{
  20.         freopen(  "marathon.in", "r", stdin);
  21.     }
  22.    
  23.    
  24.     cin >> N  ;
  25.     int x, y, lx, ly;
  26.     long sum = 0;
  27.     {
  28.         cin >> lx >> ly;
  29.         listV.push_back({lx,ly});
  30.         pref[1] = sum;
  31.         if(isDiag) cout << "i: " << 1 << "(" << lx << ", " << ly << ") " << endl;
  32.     }
  33.     for (int i = 1; i < N; i++)
  34.     {
  35.         cin >> x >> y;
  36.         listV.push_back({x,y});
  37.         int va = cal(x, y, lx, ly);
  38.        
  39.         sum += va;
  40.         pref[i+1] = sum;
  41.         if(isDiag) cout << "i: " << i + 1 << "(" << x << ", " << y << ") " << ", va: " << va << ", pref: " << pref[i+1]   << ", old: " << "(" << lx << ", " << ly << ")" << endl;
  42.         lx = x;
  43.         ly = y;
  44.     }
  45.     for (int i = 2; i < N; i++)
  46.     {
  47.         int fo = 1;
  48.         int to = i - 1;
  49.         int dist = pref[to] - pref[fo];
  50.        
  51.         int next = to+1;
  52.         int dist2 = pref[N] - pref[next+1];
  53.            
  54.         pair<int, int> p1 = listV[to-1];
  55.         pair<int, int> p2 = listV[next];
  56.         int dist3 = cal(p2.first, p2.second, p1.first, p1.second);
  57.         int sum = dist + dist3 + dist2 ;
  58.         if(isDiag) cout << "skip : " << i << ", sum: " << sum << ", dist: "<< dist << ", dist2: ("<< N << "-" << next +1<< ")"<< dist2
  59.             << ", ( " << fo << "-" << to <<"), next: (" << next << "-" << N << ")" ;
  60.         if (isDiag) cout << "   recal: " <<"(" << p1.first<<", " << p1.second<<")"
  61.                 << "-" <<"(" << p2.first << ", " << p2.second << ")" << ", dist3: " << dist3<< endl;
  62.         ans = min(ans, sum);
  63.     }
  64.    
  65.    
  66.    
  67.    
  68.     if(!isDiag) freopen("marathon.out", "w", stdout);
  69.     cout << ans << endl;
  70. }
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement