CodeForces 1475C - 做题记录
题意理解
- 数据组数 $T$
- 男孩 $a$ 个,女孩 $b$ 个,舞伴 $k$ 对
思路
存储数据
1 | vector<pair<int, int>> dancePair; |
计算答案
方法一
期望得分:20
暴力枚举每一对舞伴 $(boy_{i} - girl_{i})$
1 | register unsigned long long ans = 0; |
结果第四个点 TLE 了,一看时间复杂度 $O (n^{2})$,难道 $n^{2}$ 过百万已经不灵验了?(好吧题目中的是两百万)
方法二
期望得分:100
仔细研究发现,我们可以枚举每一对舞伴,并将所有 $k$ 对舞伴中除了与他们有相同的组成以外的加入答案中即可。
详细版: 共 $k$ 对舞伴,除去本身后有 $k - 1$ 对舞伴,在剩下的 $k - 1$ 对舞伴中,与选择的舞伴中男生相同的有 $aryBoy [boy_{choose}] - 1$ 对,与女生相同的有 $aryGirl [girl_{choose}] - 1$ 对,则每次枚举需要增加的数量为
$$
(k - 1) - (aryBoy[boy_{choose}] - 1) - (aryGirl[girl_{choose}] - 1) \newline
= k - aryBoy[boy_{choose}] - aryGirl[girl_{choose}] + 1
$$
此时我们对每一对男生女生都重复计算了两次,则最后答案需要除以 $2$。
1 | int aryBoy[MAX_K], aryGirl[MAX_K]; |