题意就是给n个数字,然后如果2个数字之和%k==0,那么这2个数字可以组成一组,然后要求组成最多组数花费的数字。
感觉这道贪心很难想到。正解是存ai%k的值,然后对于余数i对应的数字就和余数k-i对应的数字配一组即可被k整除。
#include<bits/stdc++.h>
using namespace std;
int cnt[105];
int main()
{
memset(cnt,0,sizeof(cnt));
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
cnt[x%k]++;
}
int ans=0;
for(int i=0;i<=k/2;i++)
{
if(i==0)
ans+=cnt[i]/2*2;
else
{
if(i==k-i)
ans+=cnt[i]/2*2;
else
ans+=min(cnt[i],cnt[k-i])*2;
}
}
cout<<ans<<endl;
return 0;
}