Codeforces Round #544 (Div. 3) B. Preparation for International Women's Day

  题意就是给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;
}
原文地址:https://www.cnblogs.com/eason9906/p/11754800.html