碰到一道不错的扩展欧几里德题目 whu 1338

http://acm.whu.edu.cn/land/problem/detail?problem_id=1338


题意:N种不同的硬币,每种num[i]个。问把这些硬币摆成一条线共有多少种摆法。

 
解:设硬币共有sum个,不考虑相同硬币是同一种情况。

组合数学上的定理(这个忘了,又重新翻的,看来得做题才能加深印象):令S是一个多重集合,又k个不同类型的元素,各元素的重数没别为n1,n2,...,nk。设S的大小为n = n1 + n2 + ... + nk。则S的排列数为: n! / (n1!*n2!*...*nk!);

a = sum! % MOD, b = ∑num[i]! % MOD;

ans = a/b%MOD;

根据模运算公式

ans = (a%MOD * x%MOD)%MOD;

x为b的乘法逆元,即 b*x = 1(mod MOD);

可以用扩展欧几里德求x,然后解出ans。

posted @ 2012-06-13 16:41  AC_Von  阅读(282)  评论(0编辑  收藏  举报