結果

問題 No.837 Noelちゃんと星々2
ユーザー utouto97
提出日時 2019-06-24 00:36:14
言語 C++11(廃止可能性あり)
(gcc 13.3.0)
結果
AC  
実行時間 48 ms / 2,000 ms
コード長 1,129 bytes
コンパイル時間 1,512 ms
コンパイル使用メモリ 163,192 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-06-11 14:25:33
合計ジャッジ時間 2,954 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 29
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define rep(i,l,r) for(int i=(int)(l);i<(int)(r);i++)
#define all(x) (x).begin(),(x).end()
#define pb push_back
template<class T>bool chmax(T &a,T b){if(a<b){a=b;return 1;}return 0;}
template<class T>bool chmin(T &a,T b){if(a>b){a=b;return 1;}return 0;}

typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<vi> vvi;

const int inf = 1LL<<60;
const int mod = 1e9 + 7;
const double eps = 1e-9;

/*{
}*/

signed main(){
  int n;
  cin >> n;

  vi y(n);
  rep(i, 0, n) cin >> y[i];

  if(n == 2){
    cout << (y[0] == y[1]) << endl;
    return 0;
  }

  sort(all(y));

  if(y[0] == y[n-1]){
    cout << 1 << endl;
    return 0;
  }
  if(y[0] == y[n-2]){
    cout << 0 << endl;
    return 0;
  }
  
  vi s(n+1);
  rep(i, 0, n) s[i+1] = s[i] + y[i];

  int ans = inf;
  rep(i, 1, n){
    int m1 = i/2;
    int m2 = (i+n)/2;

    int t1 = y[m1]*m1 - s[m1];
    int t2 = s[i]-s[m1] - y[m1]*(i-m1);
    int t3 = y[m2]*(m2-i) - (s[m2]-s[i]);
    int t4 = s[n]-s[m2] - y[m2]*(n-m2);

    chmin(ans, t1+t2+t3+t4);
  }

  cout << ans << endl;

  return 0;
}
0