結果
| 問題 |
No.972 選び方のスコア
|
| コンテスト | |
| ユーザー |
leaf_1415
|
| 提出日時 | 2020-01-18 03:16:13 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 75 ms / 2,000 ms |
| コード長 | 1,113 bytes |
| コンパイル時間 | 766 ms |
| コンパイル使用メモリ | 59,868 KB |
| 実行使用メモリ | 6,656 KB |
| 最終ジャッジ日時 | 2024-06-26 07:08:17 |
| 合計ジャッジ時間 | 3,915 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 32 |
ソースコード
#include <iostream>
#include <algorithm>
#define llint long long
#define inf 1e18
using namespace std;
llint n;
llint a[200005], sum[200005];
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i], a[i] *= 2;
sort(a+1, a+n+1);
if(n <= 2){
cout << 0 << endl;
return 0;
}
for(int i = 1; i <= n; i++) sum[i] = sum[i-1] + a[i];
llint ans = 0;
for(llint i = 2; i <= n-1; i++){
llint m = a[i];
llint ub = min(n-i, i-1)+1, lb = 0, mid;
while(ub-lb>1){
mid = (ub+lb)/2;
if(a[n-mid+1] + a[i-mid] > 2*m) lb = mid;
else ub = mid;
}
llint tmp = sum[n]-sum[n-lb] + sum[i]-sum[i-lb-1] - m*(2*lb+1);
//cout << i << " " << m << " " << lb << " " << tmp << endl;
ans = max(ans, tmp);
}
for(llint i = 2; i <= n-2; i++){
llint m = (a[i]+a[i+1])/2;
llint ub = min(n-(i+1), i-1)+1, lb = 0, mid;
while(ub-lb>1){
mid = (ub+lb)/2;
if(a[n-mid+1] + a[i-mid] > 2*m) lb = mid;
else ub = mid;
}
llint tmp = sum[n]-sum[n-lb] + sum[i+1]-sum[i-lb-1] - m*(2*lb+2);
ans = max(ans, tmp);
}
cout << ans / 2 << endl;
return 0;
}
leaf_1415