2019ACM-ICPC瀋陽ネットワークゲーム-F-鳴らすのプール(多重集合シミュレーション、記号)

クラクションのプール

1000ミリ秒

262144K

 

我々はすべて知っているように、クラクションがあり  、N と番号、nはプール  1 1〜  n個のn。あり  a_iをI  におけるリットルの水  I i番目のプールが。毎日、クラクションは順番に次の操作を実行します。

  1. (1以上ある場合は、ランダムに1つを選択してください)ほとんど水でプールを検索し、1リットルの水を取ります。

  2. (1以上ある場合は、ランダムに1つを選択してください)少なくとも水でプールを検索し、プールに水1リットルを注ぎます。

  3. 家に帰ると、(次の日を待っている)休息。

ほとんどの水でプール内の水の量とした後、少なくとも水と、プール内の水の量との差を計算してください  k個のk個の日を。

入力

入力は複数のテストケースから構成されています。入力は、40を超えないデータセットのfile.The番号の末尾で終了します

各テストケースの最初の行は、二つの整数含ま  N nおよび  k個のプールの数、プールを操作する日数を示すkは、。

各テストケースが含まれているの2行目  のn nは整数、および  I i番目の数が表す  a_iをI 中の水の初期量を示す  I i番目のプール。

500000 \ 1 \ K 1 N 5 0 0 0 0 0、  10 ^ 9 \ 1 \ K 1 K 1 0 10 ^ 9 \ a_iを\ 1 1 1 0 9。

出力

各テストケースのために、上述した回答を含む一行を印刷します。

サンプル入力1

4 100 
1 10 10

サンプル出力1

1

サンプル入力2

4 3 
2 2 2 2

サンプル出力2

0

シミュレーションは、TLE、データ主体があまりにもそれを水でさえありません。

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3 typedefの長い 長いLL。
4多重集合<LL> STE。
5  INT メイン()
 6  {
 7      INTのN、K。
8      ながら(〜のscanf(" %D%以下のLLD "、&​​N&K))
 9      {
 10          ste.clear()。
11          のためにint型 i = 1 ; iが<= N ++ I)
 12          {
 13              LL。
14             scanf関数(" %のLLD "、&​​A )。
15              ste.insert(A)。
16          }
 17          多重集合<LL> ::イテレータIT1、IT2。
18          一方(k-- 19          {
 20              IT1 = ste.begin()。
21              LL A = * IT1。
22              ste.erase(IT1)。
23              ste.insert(++ A)。
24  
25              IT2 = - ste.end()。
26              = * IT2。
27              ste.erase(IT2)。
28              ste.insert( - A)。
29          }
 30          LL ANS =(*( - ste.end())) - (* ste.begin())。
31          のprintf(" %LLDする\ n " 、ANS)。
32      }
 33      リターン 0 34 }

 

おすすめ

転載: www.cnblogs.com/CharlieWade/p/11519899.html