結果
| 問題 |
No.972 選び方のスコア
|
| コンテスト | |
| ユーザー |
C_nena_E
|
| 提出日時 | 2020-01-18 09:36:20 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 1,088 ms / 2,000 ms |
| コード長 | 1,270 bytes |
| コンパイル時間 | 2,174 ms |
| コンパイル使用メモリ | 78,168 KB |
| 実行使用メモリ | 61,604 KB |
| 最終ジャッジ日時 | 2024-06-27 01:21:33 |
| 合計ジャッジ時間 | 30,122 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 32 |
ソースコード
import java.util.*;
import java.io.*;
import java.math.*;
public class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long[] li = new long[n];
long[] rsw = new long[n+1];
long ans = 0;
for(int i = 0; i < n; i++){
li[i] = sc.nextInt();
}
if(n <= 2){
System.out.println(0);
return;
}
Arrays.sort(li);
for(int i = 1; i <= n; i++){
rsw[i] += li[i-1]+rsw[i-1];
}
for(int i = 1; i < n-1; i++){
int left = 1;
int right = Math.min(i+1,n-i);
while(Math.abs(right-left) > 1){
int mid = (left + right) /2;
if(check(li,i,mid)){
left = mid;
}else{
right = mid;
}
}
long val = rsw[i] - rsw[i-left] + rsw[n]-rsw[n-left];
val -= li[i]*left*2;
ans = Math.max(ans, val);
}
System.out.println(ans);
}
static boolean check(long[] li, int i, int mid){
int n = li.length;
return (li[n-mid] + li[i-mid])-(2*li[i]) >= 0;
}
}
C_nena_E