time limit per test
2 seconds
memory limit per test
256 megabytes
You are given an array a consisting of n positive integers.
Initially, you have an integer x=0. During one move, you can do one of the following two operations:
- Choose exactly one i from 1 to n and increase ai by x (ai:=ai+x), then increase x by 1 (x:=x+1).
- Just increase x by 1 (x:=x+1).
The first operation can be applied no more than once to each i from 1 to n.
Your task is to find the minimum number of moves required to obtain such an array that each its element is divisible by k (the value k is given).
You have to answer t independent test cases.
Input
The first line of the input contains one integer t (1≤t≤2⋅104) --- the number of test cases. Then t test cases follow.
The first line of the test case contains two integers n and k (1≤n≤2⋅105;1≤k≤109) --- the length of a and the required divisior. The second line of the test case contains n integers a1,a2,...,an (1≤ai≤109), where ai is the i-th element of a.
It is guaranteed that the sum of n does not exceed 2⋅105 (∑n≤2⋅105).
Output
For each test case, print the answer --- the minimum number of moves required to obtain such an array that each its element is divisible by k.
Example
Input
Copy
5
4 3
1 2 1 3
10 6
8 7 1 8 3 7 5 10 8 9
5 10
20 100 50 20 100500
10 25
24 24 24 24 24 24 24 24 24 24
8 8
1 2 3 4 5 6 7 8
Output
Copy
6
18
0
227
8
Note
Consider the first test case of the example:
- x=0, a=[1,2,1,3]. Just increase x;
- x=1, a=[1,2,1,3]. Add x to the second element and increase x;
- x=2, a=[1,3,1,3]. Add x to the third element and increase x;
- x=3, a=[1,3,3,3]. Add x to the fourth element and increase x;
- x=4, a=[1,3,3,6]. Just increase x;
- x=5, a=[1,3,3,6]. Add x to the first element and increase x;
- x=6, a=[6,3,3,6]. We obtained the required array.
Note that you can't add x to the same element more than once.
解题说明:此题是一道数学题,因为每个元素只能被加一次,我们对每个元素%k,然后记录他们出现的次数(不考虑k能整除的情况),因为x是递增的,所以如果我们将取余后的数看成一个数组的话,就相当于x在这个数组上跑循环,直到循环次数等于数组中最大的那个数为止。
cpp
#include<iostream>
#include<map>
#include<cmath>
#define ll long long
using namespace std;
int main()
{
ll t, n, k, a, ans;
cin >> t;
while (t--)
{
cin >> n >> k;
map<ll, ll>mp;
ans = -1;
for (int i = 0; i < n; i++)
{
cin >> a;
if (a % k)
{
ans = max(ans, (k - a % k) + k * mp[k - a % k]++);
}
}
cout << ans + 1 << endl;
}
return 0;
}