Equalize the Remainders(set二分+思维)
You are given an array consisting of nn integers a1,a2,…,ana1,a2,…,an, and a positive integer mm. It is guaranteed that mm is a divisor of nn.
In a single move, you can choose any position ii between 11 and nn and increase aiai by 11.
Let’s calculate crcr (0≤r≤m?1)0≤r≤m?1) — the number of elements having remainder rr when divided by mm. In other words, for each remainder, let’s find the number of corresponding elements in aa with that remainder.
Your task is to change the array in such a way that c0=c1=?=cm?1=nmc0=c1=?=cm?1=nm.
Find the minimum number of moves to satisfy the above requirement.
Input
The first line of input contains two integers nn and mm (1≤n≤2?105,1≤m≤n1≤n≤2?105,1≤m≤n). It is guaranteed that mm is a divisor of nn.
The second line of input contains nn integers a1,a2,…,ana1,a2,…,an (0≤ai≤1090≤ai≤109), the elements of the array.
Output
In the first line, print a single integer — the minimum number of moves required to satisfy the following condition: for each remainder from 00 to m?1m?1, the number of elements of the array having this remainder equals nmnm.
In the second line, print any array satisfying the condition and can be obtained from the given array with the minimum number of moves. The values of the elements of the resulting array must not exceed 10181018.
Examples
Input
6 3
3 2 0 6 10 12
Output
3
3 2 0 7 10 14
Input
4 2
0 1 2 3
Output
0
0 1 2 3
題意:構(gòu)造出這樣的一組序列,使得這個(gè)數(shù)組中的每個(gè)數(shù)字取模m之后的數(shù)字即0~m-1都出現(xiàn)過n/m次。問最少需要操作多少次。
思路:對(duì)于余數(shù)出現(xiàn)次數(shù)少于n/m次的數(shù),我們放到set中去。
對(duì)于出現(xiàn)次數(shù)多于n/m的數(shù),我們二分去找set中第一個(gè)大于這個(gè)數(shù)的數(shù)。如果操作之后這個(gè)數(shù)的出現(xiàn)次數(shù)等于n/m次了,就將之從集合中刪除。
代碼如下:
努力加油a啊,(o)/~
總結(jié)
以上是生活随笔為你收集整理的Equalize the Remainders(set二分+思维)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Divide by three, mul
- 下一篇: PolandBall and Fores