タイトルの説明
これで商品がインストールされました。引っ越し会社の上司であるB氏がやってきました。彼の誕生日は今日で、彼はとても幸せでした。当初は送料無料にすることを決めていましたが、いくつかの要因により、彼は考えを変えました。現在、N個の製品が知られていますが、それらを処理するためのコストもかかります。さて、B氏は2つのアイテムをランダムに選択することにしました。これら2つの製品を組み合わせて新しい製品を作成すると、取り扱いコストは、選択した2つの製品のコストの合計をKで割った結果になります。(Kはファイルから読み取られます)これは、1つのアイテムのみが受信されるまで繰り返されます。これは、ストアが支払う必要があるものです。店主はより多くのお金をホーププロジェクトに寄付するために、できるだけ少ない支払いを望んでいます。だから、少なくともいくらかかるか計算するのを手伝ってください。
入力
n、k
w1、w2、…、wn(各製品の運送費)
アウトプット
最低支払額を示す数値を出力します。
入力例
5 2 1 2 3 4 5
出力例
1
プロンプト
n <= 10000、k <= 10000
コード
#pragma GCC optimize(1) #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize( "Ofast") #include <bits / stdc ++。h> #define rep(i、j、k)for (int int i =(j); i <=(k); ++ iを登録) 名前空間std を使用 ; priority_queue < int > s; int n、k; テンプレート < クラス T>インラインvoid read(T&x){ x = 0 ; 登録文字 c = getchar(); ブール値を 登録 f =0 ; while(!isdigit(c))f ^ = c == ' - '、c = getchar(); while(isdigit(c))x = x * 10 + c- ' 0 '、c = getchar(); if(f)x = -x; } int main(){ read(n)、read(k); rep(i、1 、n){ register int x; read(x); s.push(x); } for(register int i = 1 ; i <n; i ++ ){ register intバツ; x = s.top(); s.pop(); x + = s.top(); s.pop(); x = x / k; s.push(x); } cout << s.top()<< endl; 0を返し ます。 }