hiho一下第263周《小Hi和小Ho的礼物》题目分析

2
0

《小Hi和小Ho的礼物》题目分析

本题是一道容斥原理计数+HASH的题目。

首先我们可以预处理出两个哈希表f和g。

其中f[x]表示 满足Ai + Aj == x且i < j的二元组(i, j)的数量。

g[x]表示 A数组中x的数量。

f和g都可以通过枚举得到,时间复杂度分别是O(N^2)和O(N)。

然后我们可以枚举i和j,即小Hi得到的2袋金币是Ai + Aj。枚举的复杂度是O(N^2)。

这时小Ho的2袋的选择只能从 f[Ai + Aj] 个二元组中选择。考虑到小Ho不能选择Ai也不能选择Aj,根据容斥原理:

如果Ai == Aj 则小Ho总共有 f[Ai + Aj] - 2 * g[Ai] + 3 种选择。

如果Ai != Aj 则小Ho总共有 f[Ai + Aj] - g[Ai] - g[Aj] + 1 种选择。

所以对于每一种小Hi的组合(i, j),我们都可以利用f和g做到O(1)求出对应的小Ho的选择数量。

于是总的复杂度是O(N^2)。

1 answer(s)

1

还有一个思路,首先枚举所有的二元组,再根据和进行排序,对所有和相等的二元组根据个数可以求出取两组的选择数量。再排除互斥的选择,用一个数组记录该二元组集合中每个项出现的次数,次数大于2表明有互斥的二元组,同样可以直接计算互斥的数量。由于不可能存在i,j都相等的二元组,故所有互斥的二元组一定是某一个下标相等,由此可知正确性。

时间复杂度略高,主要是排序复杂度为N^2 log(N^2)。考虑到和不会超过2000000,采用基数排序还能更快。感觉这个思路更容易想到,也容易理解。

write answer 切换为英文 切换为中文


转发分享