(资料图)
【数学】n-1一定满足要求,不断循环后,[2,n]都会在桌子上,答案为n - 1,记得特判n=1的情况。
猴子碰撞的方法数
【数学】正难则反(考虑全集减去对立事件),只有全部顺时针和逆时针这两种情况才不会相撞,所以答案是2^n - 2(每个猴子向左或向右是2^n),要用快速幂计算。为了避免负数需要-2再转换到非负数上。(pow(2, n, MOD)的范围是[0, mod - 1]可能是负数)
将珠子放入背包中
【排序 + 贪心】问题相当于把 weights 划分成 k 个连续子数组,分数等于每个子数组的两端的值之和。weights[0] 和 weights[n−1] 一定在分数中,最大分数和最小分数相减,抵消了。上一个子数组的末尾和下一个子数组的开头一定同时在分数中。把所有n-1个weights[i]+weights[i+1]算出来,排序,那么最大的k-1个数和最小的k-1个数相减,即为答案。
统计上升四元组
【预处理 + 枚举】枚举中间的j和k更容易计算。需要计算在k右侧的比nums[j]大的元素个数,记作great[nums[j]]在j左侧的比nums[]小的元素个数,记作less[j] [nums[k]]。对于固定的j和k,根据乘法原理,对答案的贡献为less[j] [num[s]] [k] · great [k] [nums[j]]。维护方法:倒序遍历nums,设xnums[j-1],对于x,小于它的数的个数加一,即less[j] [x]加一。