読者です 読者をやめる 読者になる 読者になる

SRM 613 Div1Easy TaroFriends

解法
与えられた配列をソートしたとき、要素 0 番目から順に見てある要素の猫までは右に進み、ある要素の猫からは左に進む。その区切りの位置を全探索する。

#include<bits/stdc++.h>
using namespace std;
#define INF (1<<29)
#define ALL(x) (x).begin(), (x).end()
#define REP(i,a,b) for(int i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)
typedef vector<int> VI;
class TaroFriends {
public:
  int getNumber(vector <int> C, int X) {
    int const N = C.size();
    sort(ALL(C));
    int ans = INF;
    rep(i, N) {
      VI v(N);
      rep(j, i) {
        v[j] = C[j] + X;
      }
      REP(j, i, N) {
        v[j] = C[j] - X;
      }
      ans = min(ans, *max_element(ALL(v)) - *min_element(ALL(v)));
    }
    return ans;
  }
};