此题坑爹!鉴定完毕!
此题我是自己做的。由于没搜到题解,只在uva的论坛上找到几组数据和提示。如果认为我的思路有问题的望大牛指正,感激不尽
此题做的我蛋疼心碎脑死。。。书上给的备注:入门题。。。知识点很简单。。。。尼玛居然卡unsigned64 但是呢!!!我反正用unsigned64是没过的。。。。你们试试看如果用unsigned 64过了的求讨论!!! 我被这数据卡了一晚上,我找错找了半天找不出来啊。。。。。
后来自己造了个极限数据:
3
0 0 0
11
0 0 1 2 3 4 5 6 7 8 9
12
0 1 2 3 4 5 6 7 8 9 9 9
答案是:
0
907199999990928000
46569599999953430400
我在第二组错了我开始就想我第一组既然没错 那么就代表我思路是对的。。估计是我爆数据了,本来打算用java写biginteger的。。。哎。。实在太懒。。我做了一晚上了实在不想在去用java写了。。。最后还是老老实实敲了个数组模拟的。。。哎。。。坑爹你个芭拉。。。。
此题用到知识点:不全相异的全排列。这是在那本组合数学及应用上看到的。相当实用啊。
eg:现在有3只红球,2只白球,把这5只球排成一行,问多少种排法,其中白球和红球没区别
那么如果用a表示红球 b表示白球 可以得到10种排法
aaabb , aabab , aabba , abaab , ababa , baaab , baaba , abbaa , babaa , bbaaa
一般地,在不全相异的物体中,其中n1个物体是相同的 n2个物体是相同的,……,nk个物体是相同的
那么全排列数是:
N! / (N1! * N2! * N3! * N4!*……*Nk!)
对于此题我是这么想的:如果每个数只出现一次呢,那么是不是很好算出来? 就是每个数在其位置上出现N次
如果有频率 >=2那么就说明有重复的数,那么可以这么理解,对于除去当前访问的这个数,我们对于其他的数字可以看成上面的问题 每个数字看成个球 然后个数表示相同的个数,然后对于除去这个数字后的其他数字的排列就代表当前访问这个数在其位子上可以变换的次数。比方说假设我1 2 3 当1放在百位时候,2,3的全排列是2 那么1在百位上出现的次数就是两次 所以呢我只要1*100就可以了。那么第一种情况其实是第二种的特殊情况