Guest User

Untitled

a guest
Jan 22nd, 2018
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. #define SQR(x) ((x)*(x))
  8. #define INF (1000*1000*1000)
  9.  
  10. struct point
  11. {
  12.     int x, y;
  13. };
  14.  
  15. point p[600];
  16. int d[600][600], n, f[600][600];
  17. int ans = INF, r[600][600];
  18.  
  19. int main()
  20. {
  21.     freopen("input.txt", "r", stdin);
  22.     freopen("output.txt", "w", stdout);
  23.     cin >> n;
  24.     for(int i = 0 ; i < n; i++)
  25.         cin >> p[i].x >> p[i].y;
  26.     for(int i =0 ; i < n; i++)
  27.         for(int j = 0; j < n; j++)
  28.             if (abs(p[i].x-p[j].x) > 40000 || abs(p[i].y-p[j].y) > 40000)
  29.                 r[i][j] = INF;
  30.             else
  31.                 r[i][j] = SQR(p[i].x-p[j].x) + SQR(p[i].y-p[j].y);
  32.     for(int i = 0; i < n; i++)
  33.         for(int j = 0; j < n; j++)
  34.         {
  35.             d[i][j] = j;
  36.             f[j][i] = j;
  37.         }
  38.     for(int i = 0; i < n; i++)
  39.         for(int j = 0; j < n; j++)
  40.             for(int k = j+1; k < n; k++)
  41.                 if (r[i][d[i][j]] > r[i][d[i][k]])
  42.                 {
  43.                     swap(f[d[i][j]][i], f[d[i][k]][i]);
  44.                     swap(d[i][j], d[i][k]);
  45.                 }
  46.     for(int i = 0; i < n; i++)
  47.         for(int j = i+1; j< n; j++)
  48.         {
  49.             ans = min(ans, r[i][d[i][n-1]]);
  50.             int ptr = 0;
  51.             for(int k = n-1; k >= 0; k--)
  52.             {
  53.                 ptr = max(ptr, f[d[i][k]][j]);
  54.                 ans = min(ans, (k > 0 ? r[i][d[i][k-1]] : 0)+r[j][d[j][ptr]]);
  55.             }
  56.         }
  57.     cout << ans << endl;
  58.     return 0;
  59. }
Add Comment
Please, Sign In to add comment