第一次写网络赛的题解,福州赛区网络赛作为我第一年ACM最后一次网络赛酱油,画了一个很像逗号的句号.....好吧,还得为北京现场赛准备啊准备.......
这次酱油打的很犀利,貌似出第一题很快,之后节奏就总比师兄们慢一步.....囧死了,名次很顺利的入手,就没啥了,写下题解吧。
第一题:A Card Game
坑爹的题目叙述,仰慕杰哥非常犀利的YY出题意,ans = a[1] / N......好吧,现在证明一下啊。
首先,我们假设取牌的顺序是一个序列,我们考虑可行序列存在的情况:对于序列中任意一个数i的后面一个数j,必然要放在第i堆里面,因为值为i的数有a[i]个,所以在i后面的数也恰好有a[i]个,所以a[i]数放在了第i堆,符合题目约束了。
由于游戏从第一个堆开始,第一个数是没有前驱的,所以,如果最后一个数不是1,那么第一堆必然是a[1] + 1个数了,与约束不符合。而且,如果最后一个数不是1,记为i的话,就只有a[i] - 1个后继了。
所以,综上,只有最后一个数为1,那么堆容量a[i]才会符合约束,而我们能根据序列构造一种符合情况的分摊和取牌方案,所以,题目变为了:N个数的全排列,其中最后一个是1的概率.....
先从a[1]个1里面取一个1,有a[1]种方案,之后剩下N-1个数全排列(N-1)!,符合结尾是1的方案数是a[1] * (N-1)!种,所以解就是a[1] / N。