题意:
给一个数组A和一个值K,你可以做两种操作
X++;
(X最初等于0)A[i]+=X;X++;
问能否使得A数组里的所有数都能被K整除
思路:
算出现次数最多且值最小的A[i]%K!=0
,ANS就等于次数*K+K-A[i]%K+1
不要忘记 +1 操作,因为操作2在执行后X会自动加一
代码附:
#pragma GCC optimize("Ofast","inline","-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<bits/stdc++.h>
#define int long long
using namespace std;
using ll = long long ;
const int N = 2e5+10;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t,n,k,x;
cin>>t;
while(t--)
{
map<int,int>mp;
cin>>n>>k;
int turn=0,c=k;
for(int i=0; i<n; ++i)
{
cin>>x;
x%=k;
if(x)
{
mp[x]++;
if(mp[x]>turn||mp[x]==turn&&x<c)
turn=mp[x],c=x;
}
}
c=k-c;
if(turn)
k=k*(turn-1);
else
k=0;
cout<<c+k+(c+k>0)<<endl;
}
return 0;
}