问题转化:
设两颗宝石魔力值分别为 ai 和 aj,它们之和为 M 的倍数,等价于 (aimodM)+(ajmodM) 是 M 的倍数(在模 M 意义下为 0)。
因此只需要考虑每颗宝石的余数 ri=aimodM。
统计余数:
用哈希表统计每种余数的出现次数,记 cnt[r] 表示余数为 r 的宝石数量。
作为一名宝石鉴定师,你发现了一批蕴含魔力的宝石,共有 n 颗,每颗宝石有一个正整数魔力值。你希望挑选若干宝石组成一个“共鸣阵”,使得阵中任意两颗不同宝石的魔力值之和都是某个特定正整数 M 的倍数。共鸣阵的威力随宝石数量增加,因此你想尽可能多地挑选宝石。请你计算在满足上述条件的前提下,最多能够挑选的宝石数量。
如果无法选出至少 2 颗宝石(即任何满足条件的选法大小都小于 2),则无法构成有效的共鸣阵。这里元素个数 n 不超过 2×105,每颗宝石的魔力值以及 M 均为不超过 109 的正整数。
输入共两行: 第一行包含两个正整数 n 和 M,分别表示宝石的总数和目标倍数。 第二行包含 n 个正整数 a1,a2,…,an,表示每颗宝石的魔力值。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.