洛谷:P1866:编号
题目
分析
考虑4个兔子的情况,假定它们的编号偏好是[8, 3, 5, 6]
。显然,如果3
这只兔子最后一个选,而另外三只兔子已经选好了1/2/3
,那这只兔子将没有编号可选。所以,我们需要从编号最低的兔子开始。假定已经完成排序,那么分配号码的过程模拟如下:
3
这只兔子有\(3\)种选择。5
这只兔子本来可以有5种选择,但一定会被3
这只兔子用掉1个。所以它的选择是\(4\)种。6
这只兔子本来可以有6种选择,但一定会被3
和5
这两只兔子用掉了2个。它的选择是\(4\)种。8
这只兔子本来可以有8种选择,但一定会被3
、5
和6
这三只兔子用掉了3个。它的选择是\(5\)种。
最终的选择方案是:\(3 \times 4 \times 4 \times 5 = 240\)种。
另外,题目中提到要对\(10^9+7\)取模,那么中间结果必须用long long
来表示,不然会溢出。同时,每步计算都要求一下模。
答案
思考
这里有两个点需要强调:
- 必须用
long long
——当然,实际中因为不断求了模,中间结果好像不是太大。我用了int
也通过了。 - 排序很关键。