CF1883C题解
思路
考虑到
可以发现,当
当
-
将
a 中两个数分别修改成2 的倍数。 -
将
a 中一个数修改成4 的倍数。
取两种情况最小值即可。
代码
#include <bits/stdc++.h>
using namespace std;
int a[100007];
int main()
{
int t;
cin>>t;
while(t--)
{
int n,k;
cin>>n>>k;
int minn=0xfffffff;
for(int i=0;i<n;i++) cin>>a[i];
if(k!=4){
for(int i=0;i<n;i++)
{
int x=a[i];
minn=min(minn,(x%k!=0?k-x%k:0));
}
}else{
for(int i=0;i<n;i++)
{
int x=a[i];
minn=min(minn,(x%k!=0?k-x%k:0));
}
int minn1=0xfffffff;
k=2;
int id=0;
for(int i=0;i<n;i++)
{
int x=a[i];
if(minn1>(x%k!=0?k-x%k:0))
{
minn1=(x%k!=0?k-x%k:0);
id=i;
}
}
a[id]=0xfffffff;
int minn2=0xfffffff;
for(int i=0;i<n;i++)
{
int x=a[i];
minn2=min(minn2,(x%k!=0?k-x%k:0));
}
minn1+=minn2;
minn=min(minn1,minn);
}
ansok:
cout<<minn<<endl;
}
return 0;
}