2020HNCPC赛后总结

哎,从大一下学期末开始正式打ACM,到现在大三了。今年就A了6题拿了二等。C题真的就是差一点功力。没想到预处理O(1)判组合数奇偶性,套Lucas定理又超时。然后就因此错别金。

现在想起来真的是没办法。很无力。确实ACM是三个人打的游戏,我们有个天赋很好的选手可惜不喜欢刷题。。。能够有非常巧妙的灵感。但是到底刷题量不够还是不行。没办法,一个人再怎么努力也是行不通的。

其实也挺无语的,这次叉姐出的题,H,C。一道银牌题,一道金牌题。可惜全是数学题。我准备了那么久dp,那么多数据结构,字符串,图论都没派上用场。说到底还是被数学题给打烂了。还是缺少一点知识面啊。

昨天刚打完,今天人都比较失落吧。。。准备了这么久,到头来还是一个二等。现在只能不停的安慰自己,人生不是完美的,没有什么人的一生是一帆风顺的。现在都不知道怎么去面对接下来的事情了。一下觉得心里落空很多…

哎,上面讲的比较乱,现在来讲一下如何预处理O(1)的判组合数奇偶性。

方法一:

关键点:一个数是偶数,则必定存在至少一个素因子2.

那么考虑到 C ( n , m ) = n ! m ! ∗ ( n − m ) ! C(n,m)=\frac{n!}{m!*(n-m)!} C(n,m)=m!(nm)!n!

现在就是求阶乘中因子2的个数,这个就是 ∑ i = 1 l o g i x ⌊ x 2 i ⌋ ∗ i \sum_{i=1}^{log_ix}\lfloor\frac{x}{2^i}\rfloor * i i=1logix2ixi

所以可以预处理1到1e6的阶乘中因数2的个数。 O ( n l o g n ) O(nlogn) O(nlogn)

然后根据组合数的阶乘表示方法,我们可以 O ( 1 ) O(1) O(1)的判断分子的因子2的个数,以及分母的因子2的个数.判断大小关系即可.

方法二:

结论: C ( n , k ) C(n,k) C(n,k),当 n & k = k n \& k = k n&k=k时,组合数是奇数,否则是偶数.

你可能感兴趣的:(算法,ACM)