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

链接:https://codeforces.com/contest/1133/problem/B

题意:

给n个数,和一个k,在n个数中选几对数,保证没对数相加可以整除k。

求最大能选几个数。

思路:

记录每个数mod k的值。

通过mod k的值为多少的数的数量,计算对数。

例 k = 3时。mod k为1 和 mod k 为2 的数可以组成一对满足的数。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <bits/stdc++.h>
using namespace std;
 
typedef long long LL;
 
const int MAXN = 2e5 + 10;
 
int Mod[MAXN];
 
int main()
{
    int n, k, a;
    cin >> n >> k;
    for (int i = 1;i <= n;i++)
    {
        cin >> a;
        Mod[a % k] ++;
    }
    int res = Mod[0] / 2;
    for (int i = 1;i < k/2;i++)
    {
        int ma = min(Mod[i], Mod[k - i]);
        res += ma;
        Mod[i] -= ma;
        Mod[k - 1] -= ma;
    }
    if (k % 2 == 0)
        res += Mod[k / 2] / 2;
    else
        res += min(Mod[k / 2], Mod[k - k / 2]);
    cout << res * 2 << endl;
 
    return 0;
}

  

posted @   YDDDD  阅读(435)  评论(0编辑  收藏  举报
编辑推荐:
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
阅读排行:
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 如何打造一个高并发系统?
点击右上角即可分享
微信分享提示