문제

링크

풀이

#include <algorithm>
#include <cmath>
#include <iostream>
#include <vector>
using namespace std;
 
int n, k;
vector<int> x, y, q;
vector<vector<int>> d;
 
inline int calc(void) {
  int ret = 0;
  for (int i=0; i<n; i++) {
    int mn = 1e9;
    for (int j=0; j<k; j++) mn = min(mn, d[i][q[j]]);
    ret = max(ret, mn);
  }
  return ret;
}
 
void solve(void) {
  cin >> n >> k;
  x.resize(n); y.resize(n); q.resize(k);
  for (int i=0; i<n; i++) cin >> x[i] >> y[i];
 
  d.resize(n, vector<int>(n));
  for (int i=0; i<n; i++) for (int j=0; j<n; j++) {
    d[i][j] = abs(x[i] - x[j]) + abs(y[i] - y[j]);
  }
 
  int ans = 1e9;
  if (k == 1) {
    for (int i=0; i<n; i++) {
      q[0] = i;
      ans = min(ans, calc());
    }
  } else if (k == 2) {
    for (int i=0; i<n-1; i++) for (int j=i+1; j<n; j++) {
      q[0] = i; q[1] = j;
      ans = min(ans, calc());
    }
  } else if (k == 3) {
    for (int i=0; i<n-2; i++) for (int j=i+1; j<n-1; j++) for (int l=j+1; l<n; l++) {
      q[0] = i; q[1] = j; q[2] = l;
      ans = min(ans, calc());
    }
  }
  cout << ans;
}
 
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  solve();
  return 0;
}