Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <algorithm>
- using namespace std;
- #define SQR(x) ((x)*(x))
- #define INF (1000*1000*1000)
- struct point
- {
- int x, y;
- };
- point p[600];
- int d[600][600], n, f[600][600];
- int ans = INF, r[600][600];
- int main()
- {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- cin >> n;
- for(int i = 0 ; i < n; i++)
- cin >> p[i].x >> p[i].y;
- for(int i =0 ; i < n; i++)
- for(int j = 0; j < n; j++)
- if (abs(p[i].x-p[j].x) > 40000 || abs(p[i].y-p[j].y) > 40000)
- r[i][j] = INF;
- else
- r[i][j] = SQR(p[i].x-p[j].x) + SQR(p[i].y-p[j].y);
- for(int i = 0; i < n; i++)
- for(int j = 0; j < n; j++)
- {
- d[i][j] = j;
- f[j][i] = j;
- }
- for(int i = 0; i < n; i++)
- for(int j = 0; j < n; j++)
- for(int k = j+1; k < n; k++)
- if (r[i][d[i][j]] > r[i][d[i][k]])
- {
- swap(f[d[i][j]][i], f[d[i][k]][i]);
- swap(d[i][j], d[i][k]);
- }
- for(int i = 0; i < n; i++)
- for(int j = i+1; j< n; j++)
- {
- ans = min(ans, r[i][d[i][n-1]]);
- int ptr = 0;
- for(int k = n-1; k >= 0; k--)
- {
- ptr = max(ptr, f[d[i][k]][j]);
- ans = min(ans, (k > 0 ? r[i][d[i][k-1]] : 0)+r[j][d[j][ptr]]);
- }
- }
- cout << ans << endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment