結果
問題 | No.972 選び方のスコア |
ユーザー |
|
提出日時 | 2020-04-22 14:07:29 |
言語 | Go (1.23.4) |
結果 |
AC
|
実行時間 | 54 ms / 2,000 ms |
コード長 | 927 bytes |
コンパイル時間 | 14,730 ms |
コンパイル使用メモリ | 218,936 KB |
実行使用メモリ | 6,816 KB |
最終ジャッジ日時 | 2024-10-11 07:08:06 |
合計ジャッジ時間 | 17,989 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 32 |
ソースコード
package main import ( "bufio" "fmt" "os" "sort" "strconv" ) var sc = bufio.NewScanner(os.Stdin) func Scanner() string { sc.Scan() return sc.Text() } func main() { buf := make([]byte, 0) sc.Buffer(buf, 100000007) sc.Split(bufio.ScanWords) n, _ := strconv.Atoi(Scanner()) a := make([]int, n) for i := 0; i < n; i++ { a[i], _ = strconv.Atoi(Scanner()) } sort.Ints(a) sum := make([]int, n+1) for i := 0; i < n; i++ { sum[i+1] = a[i] sum[i+1] += sum[i] } ans := 0 b := 0 c := 0 d := 0 for i := 1; i < n-1; i++ { b = 0 c = min(i, n-i-1) + 1 for c-b > 1 { d = (b + c) / 2 if a[i-d]+a[n-d]-2*a[i] > 0 { b = d } else { c = d } } ans = max(ans, sum[i]-sum[i-b]+sum[n]-sum[n-b]-a[i]*(2*b)) } fmt.Println(ans) } func min(x int, y int) int { if x >= y { return y } else { return x } } func max(x int, y int) int { if x >= y { return x } else { return y } }