結果
| 問題 |
No.972 選び方のスコア
|
| コンテスト | |
| ユーザー |
rieaaddlreiuu
|
| 提出日時 | 2022-11-04 16:05:57 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,201 bytes |
| コンパイル時間 | 1,644 ms |
| コンパイル使用メモリ | 174,164 KB |
| 実行使用メモリ | 18,560 KB |
| 最終ジャッジ日時 | 2024-07-18 15:09:53 |
| 合計ジャッジ時間 | 9,503 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 3 |
| other | TLE * 1 -- * 31 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
long odd_max(int k,int N,vector<int> a,vector<long> a_sum){
int index = k/2;
int left = k/2 + 1;
int right = N - k/2;
int mid = a[index];
long ans = a_sum[N] - a_sum[right] + a_sum[left] - (long)k * (long)mid;
return ans;
}
long even_max(int k,int N,vector<int> a,vector<long> a_sum){
int index1 = k/2 - 1;
int index2 = k/2;
int left = k/2 + 1;
int right = N + 1 - k/2;
int mid2 = a[index1] + a[index2];
long ans = a_sum[N] - a_sum[right] + a_sum[left] - (long)k * (long)mid2 / 2;
return ans;
}
int main(){
int N;
cin >> N;
vector<int> a(N,0);
vector<long> a_sum(N+1,0);
for(int i=0;i<N;i++){
cin >> a[i];
}
sort(a.begin(),a.end());
for(int i=0;i<N;i++){
a_sum[i+1] = a_sum[i] + a[i];
}
long max = 0;
long temp;
for(int i=1;i<=N;i++){
if(i % 2 == 0){
temp = even_max(i,N,a,a_sum);
if(max <= temp){
max = temp;
}
} else {
temp = odd_max(i,N,a,a_sum);
if(max <= temp){
max = temp;
}
}
}
cout << max;
}
rieaaddlreiuu