题意
给出正整数数组 AAA, 问是否存与 AAA 长度相等且各项皆为正整数的数组 BBB 使得 AAA 的各项元素之和等于 BBB 的各项元素之和且 A、BA、BA、B 数组的每组对应项不同。
解析
记 A、BA、BA、B 数组的第 iii 项分别为 Ai,BiA_i,B_iAi ,Bi ,又记 A、BA、BA、B 数组的各项之和为 SA、SBS_A、S_BSA 、** ,根据题意,Ai≠BiA_i\ne B_iAi =Bi 且 SA=SBS_A= S_BSA =**
我们遍历 AAA 的每一项以对 BiB_iBi 估计下界。若 Ai≠1A_i\ne 1Ai =1,则 BiB_iBi 可取到 111;而当 Ai=1A_i=1Ai =1 时,根据 Ai≠BiA_i\ne B_iAi =Bi ,可得 Bi≠1B_i\ne 1Bi =1,于是 Bi≥2B_i\ge2Bi ≥2, 因此若记 AAA 数组中有 ppp 个 111 和 qqq 个非 111 元素,则:
**≥2p+q⇔SA≥2p+qS_B\ge 2p+q\Leftrightarrow S_A\ge 2p+q ** ≥2p+q⇔SA ≥2p+q
因此我们只要计算出 SAS_ASA 和 2p+q2p+q2p+q 即可判断 BBB 是否存在.
复杂度分析
对每个测试点,只需要遍历一次 AAA 数组,因此复杂度为 O(Tn)O(Tn)O(Tn)
代码