儒雅隨和的小趙閒暇時很喜歡古典文學,比如金……金銀角大王和孫悟空。
話說悟空一行在西天取經路上遇上了妖怪金角大王、銀角大王,把唐僧、八戒、沙僧、白馬,連行李一道擄去。兩個大王有幾個法寶,其中乙個是個魔葫蘆,妖怪叫誰的名字,誰應一聲,就被吸進葫蘆,兩個時辰化為膿水。
孫悟空來鬥妖魔,魔王叫「孫悟空」他應了,結果被吸進葫蘆。他設計跑了出來,重新打到魔王洞口。為了欺矇魔王他還在葫蘆裡,就自稱是孫悟空的兄弟「者行孫」。
魔王出來迎戰,重新祭起葫蘆法寶,叫「者行孫」。「行者想:『我真名字叫孫行者,起的鬼名字叫者行孫,真名字可以裝得,鬼名字裝不得』。卻又忍不住應了他一聲,颼地被吸進葫蘆裡。原來那寶貝,那管什麼名字真假,但綽個應的氣兒,就裝了他。
小趙在讀到上面的內容時想到了乙個問題,乙個名字隨便更改順序的話,能構成多少種呢?如bee有三種,分別是bee,ebe,eeb。小趙忙著閱讀古典文學,所以將這個問題拋給了你,請你幫他寫乙個程式計算結果。
輸入本題有多組測試資料,處理到檔案結束。
每組測試資料乙個字串,佔一行,長度小於1000,由a~z組成。
輸出
每組資料輸出乙個整數,代表不同排列的數量,結果可能很大請對1e9+7進行取模。
樣例輸入 copy
beesuccess
樣例輸出 copy
3420題目大意:就是給你乙個字串問能組成幾種不同的字串
題目解析:
因為字母是重複的,所以結果不是所有字母的排列數。
以success舉例,有3個s、2個c、1個u和1個e。
三個s可以用c(7,3)種不同方式,從7個位置選3個位置放置
剩下4個空位可以用c(4,2)種不同方式放置c
再用c(2,1)種方式放置u
最後c(1,1)種方式放置e
**實現可以直接預處理打出組合數的表,然後計算
也可以通過優化的遞推來節省空間。
組合數打表模板:
//ac**:組合數打表模板,適用於n<=3000
//c[i][j]表示從i個中選j個的選法。
long
long
c[n][n];
void get_c(int
maxn)
}
#pragma gcc optimize(2)#includeusing
namespace
std;
inline
int read()
typedef
long
long
ll;const
int maxn = 1e5+10
;char
a[maxn];
ll b[maxn];
const
int n=1500;//
組合數打表模板,適用於
//c[i][j]表示從i個中選j個的選法。
ll c[n][n];
const ll mod=1e9+7
;void get_c(int
maxn)
}int
main()
ll t=strlen(a);
sort(a,a+t);
ll j=0
;
for(int i=0;i)
j++;
}ll sum=1
;
for(int i=0;i)
printf(
"%lld\n
",sum%mod);
}return0;
}
c 排列組合排序 排列組合 組合數專題
書接上回,本期正男老師將帶大家梳理排列組合中組合數的相關考點,組合數考點可以細分為4類,分別為 分類數數問題 分組排序問題 塗色問題以及插棍問題。近六年高考真題中,組合數考點共涉及5道。組合數專題高考真題分布 組合數的定義以及公式如下圖所示。組合數定義 分類數數問題與排列問題中的窮舉問題相似,但分類...
排列與組合 組合數學
note 把物件排成一條線。用 p n,r 表示 n 元素集合的 r 排列的數目,則 eg 對於集合,則p n,r 中的n 3,假設取r 3,則p 3,3 3 2 1 6,即abc acb bac bca cab cba這6種。note 把物件排成乙個圓。設s是n元素集合。集合s的乙個組合通常表示集...
排列 組合數學
定義 從n個不同的元素中,取出m個不同元素,按照順序排成一列,叫做從n個元素取出m個元素的乙個排列。我們將從n個不同的元素取出m個元素所得到得不同排列數,叫做從n個元素取出m個元素的排列數 記為a n,m 其中n m a n,m n n 1 n m 1 n n m 定義 n個不同元素中取m個不同元素...