Pinely Round 5 (Div. 1 + Div. 2)
C
Loyalty
Codeforces
1200
原题
← BD →
翻译中…

No Loyalty No Royalty (c)

翻译中…

You are a customer in a store and want to buy $n$ items. Each item $i$ has a price $a_i$ such that $1 \leq a_i \leq X$, where $X$ is a loyalty factor.

翻译中…

Your loyalty level in the store is defined as $\lfloor {S \over X} \rfloor$, where $S$ is the total cost of items purchased so far. Initially, $S = 0$.

翻译中…

If you buy an item with price $p$ and your loyalty level increases as a result of this purchase, you earn $p$ bonus points.

翻译中…

Your task is to find the maximum number of bonus points you can earn by choosing an optimal order of purchase for the items.

翻译中…

Input

翻译中…

Each test contains multiple test cases. The first line contains the number of test cases $t$ ($1 \le t \le 2 \cdot 10^4$). The description of the test cases follows.

翻译中…

The first line of each test case contains two integers $n$ ($1 \leq n \leq 10^5$) and $X$ ($1 \leq X \leq 10^9$) — the number of items and the loyalty factor.

翻译中…

The second line of each test case contains $n$ integers $a_1$, $a_2$, $\ldots$, $a_n$ ($1 \leq a_i \leq X$) — the prices of the items.

翻译中…

It is guaranteed that the sum of $n$ over all test cases does not exceed $10^5$.

翻译中…

Output

翻译中…

For each test case, output two lines.

翻译中…

The first line should contain a single integer — the maximum number of bonus points that can be earned.

翻译中…

The second line should contain $n$ integers — the prices of the items in an order of purchase that maximizes the number of bonus points.

翻译中…

If there are several orders that maximize the number of bonus points, you can output any of them.

翻译中…

Note

翻译中…

In the first test case:

翻译中…
  1. After buying the first item $S = 1$, loyalty level is 0;
  2. After buying the second item $S = 3$, this increases loyalty level to $1$ and earns $2$ bonus points;
  3. After buying the third item $S = 5$, this increases loyalty level to $2$ and earns $2$ bonus points;
  4. After buying the fourth item $S = 7$, this increases loyalty level to $3$ and earns $2$ bonus points;
  5. After buying the fifth item $S = 9$, this increases loyalty level to $4$ and earns $2$ bonus points;
  6. After buying the sixth item $S = 11$, this increases loyalty level to $5$ and earns $2$ bonus points;
  7. After buying the seventh item $S = 12$, this increases loyalty level to $6$ and earns $1$ bonus point;
  8. After buying the eighth item $S = 13$;
  9. After buying the ninth item $S = 14$, this increases loyalty level to $7$ and earns $1$ bonus point;
  10. After buying the tenth item $S = 15$.
翻译中…

Overall we got $12$ bonus points.

翻译中…

In the second test case:

翻译中…
  1. After buying the first four items $S = 8$, loyalty level is 0;
  2. After buying the last item $S = 13$, this increases loyalty level to $1$ and earns $5$ bonus points.
翻译中…

In the third test case:

翻译中…
  1. After buying the first eight items $S = 20$, loyalty level is 0;
  2. After buying the ninth item $S = 30$, this increases loyalty level to $1$ and earns $10$ bonus points;
  3. After buying the tenth item $S = 51$, this increases loyalty level to $2$ and earns $21$ bonus points;
  4. After buying the eleventh item $S = 73$, this increases loyalty level to $3$ and earns $22$ bonus points.
翻译中…

样例

Input #1
7
10 2
1 2 1 2 1 2 1 2 1 2
5 10
2 2 2 2 5
11 23
5 5 22 1 21 2 10 3 1 1 2
1 1
1
1 17
11
3 100
44 32 1
16 100500
42801 73112 95296 68791 42217 21871 29316 84405 24273 42894 63370 53473 57156 61369 80 27290
Output #1
12
1 2 2 2 2 2 1 1 1 1
5
2 2 2 2 5
53
1 1 5 2 1 2 5 3 10 21 22
1
1
0
11
0
44 32 1
503499
53473 42894 80 57156 42801 61369 42217 63370 29316 68791 27290 73112 24273 84405 21871 95296
InputCopy OutputCopy
题目信息
题号
2161C
时间限制
2 s
内存限制
512 MB
标签
构造
贪心
排序
双指针

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。