ZOJ 3108 Last Digit

来源:互联网 发布:淘宝发货地址哪里设置 编辑:程序博客网 时间:2024/05/19 16:06

题目的意思是给定一个有重复元素的字符集合,叫你求在所有的排列中不重复的种数W的最后一个非0位.

如:

aaba

不重复的有4种,分别是:
aaab
aaba
abaa
baaa
所以答案是4
首先看一下数据规模,S (1 <= |S| <= 1000000),只能找规律了,于是现在的任务就是如何求得公式,来计算种数.
如果以前见过类似的组合数学的题,那可以马上推出公式,如果没有学过,那么现在一起来推一下.

就拿aaba来说
参考一个已经是按照字典序排列好的串:aaab
显然在我们所求的组合的集合中他必须是唯一的,于是我们就来计算一下aaab出现的概率
a a a b
3 2 1 1
-- -- -- --
4 3 2 1
第一个出现a的概率是:集合中a元素所能取的个数/能取的元素的总个数 ----> 3/4
第二个出现a的概率是:集合中a元素所能取的个数/能取的元素的总个数 ----> 2/3 (注意这时候总个数不再是4而是3)
第三个出现a的概率是:集合中a元素所能取的个数/能取的元素的总个数 ----> 1/2
第四个出现a的概率是:集合中b元素所能取的个数/能取的元素的总个数 ----> 1/1

那么出现aaab的概率可以很容易得到是 (3/4) *(2/3) *(1/2) *(1/1) =1 / 4=(aaab出现的次数)/总的种类数
so,总的种类数就出来了,4.
其他同理,于是可以得到公式:
假设字符串的长是L,其中C1,C2,C3...Ck分别表示集合元素的个数(显然1<=Ci<=L , 1<=i<=k)
于是总的种类数就是: L!/(C1! * C2! * C3! * C4! *..* Ck!)

现在问题又来了,面对如此大规模的L,我想普通的算法已经不能在规定时间内完成计算了.
于是只能使用对N!分解素因子的快速算法来分解素因子来求解.
其实偶的方法比较暴力.人家30MS我的230MS...


仅供参考~
Run IDSubmit TimeJudge StatusProblem IDLanguageRun Time(ms)Run Memory(KB)User Name17536522009-02-02 10:36:14 Accepted 3108C++2306356majia5





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 枕大神经发炎怎么办 塑钢推拉窗下沉怎么办 网上买东西数量不够怎么办 淘宝买东西数量不够怎么办 康佳遥控器坏了怎么办 电视机频幕脏了怎么办 极米遥控器失灵怎么办 电视遥控坏了怎么办 小米手机触摸屏失灵怎么办 oppo手机触摸屏失灵怎么办 苹果手机屏幕没反应怎么办 苹果6sp换屏卡顿怎么办 苹果4屏幕失灵怎么办 苹果手机老是卡怎么办 苹果手机卡机了怎么办 苹果手机卡屏了怎么办 苹果8手机老卡机怎么办 苹果手机不开机怎么办 手机开机后黑屏怎么办 苹果x手机黑屏怎么办 苹果7手机黑屏怎么办 苹果触控不灵敏怎么办 收银机触屏失灵怎么办 手机屏一半失灵怎么办 苹果六手机屏幕失灵怎么办 苹果5s卡怎么办 苹果5很卡怎么办 笔记本屏幕卡顿怎么办 手机外屏幕失灵怎么办 6p手机屏幕失灵怎么办 home键指纹失灵怎么办 小米触屏不灵敏怎么办 vivo手机音量小怎么办 iphone尾插松动怎么办 充电头接触不良怎么办 苹果充电口松动怎么办 苹果手机速度慢怎么办 苹果6手机屏幕失灵怎么办 手机膜有静电怎么办 手机充电带静电怎么办 苹果6锁屏键坏了怎么办