POJ 1850 Code 組合數學)

2021-08-15 23:24:22 字數 608 閱讀 1587

題意:a,b,c,...,z 26個字母組成word,並要求word內每個字母成公升序排列,按字典序對這些words從1開始進行編碼。給定乙個word輸出編碼。

思路:易得,長度為k的word總共有c(k, 26)個(即取k個按公升序排序)。對於乙個給定的word,不妨先算出從到該word長度的所有word數,再算出與該word長度相等但字典序比它大的words數,相減即可。

要計算與該word長度相等但字典序比它大的words數,即對其每一位,計算比該位字母大的字母數量,設為t,該字母到末尾長度(包括該字母)長度為l,則在該位比word大的words數為c(t, k) ,與前面同理。 遍歷一遍即可。

ac**如下:

#include #include #include #include #include #include #include #include #include using namespace std;

#define fsio ios::sync_with_stdio(0);cin.tie(0);

#define debug(a) cout<<"debug: "<<(a)<>word)

return 0;

}

POJ 1850 Code 組合數學)

題意 求str在字典中的編號。字典中的字串都是嚴格公升序排列,而且長度遞增的。a z為1 26,然後是ab az 分別編號為27 51,然後是bc bz。分析 1 首先可以確定長度比str小的總共有多少個。比如長度為2的就有c 26,2 個,相當於26個字元中選2個,由於預設是公升序排列,不會重複,...

組合數學 POJ 1850 Code

poj 1850 比如說求比358小的由1 9的數字組成的數 0不算 而且要求後面乙個數一定比前乙個數大,而且數字不能重複,類似於這個意思,這題是字母,當做數字範圍1 26就行 對於358來說 c 9,2 c 9,1 c 7,2 c 8,2 c 6,2 不想寫了,應該沒算錯 兩位數和一位數,一定比 ...

POJ 1850 code 組合數學

poj 1850 code 將字母和單詞 全部小寫並且按照字典序遞增 按照字典序編號,比如 a 1 b 2 z 26 ab 27 az 51 給你乙個字母或單詞,問你它的編號 以樹狀的結構來分析這道題會比較直觀。按照樹的節點依次編號,每個字母或單詞就落在乙個節點上。要求乙個單詞的編號,比較直接的想法...