POJ1850 Code(組合 康托展開)

2022-05-02 19:30:06 字數 747 閱讀 6064

題目問乙個合法字串的字典序是第幾個,合法的字串是指裡面的字元嚴格遞增。

先判斷合不合法,然後用類似康托展開的過程去求。大概過程就是用組合數算出某長度某字首有幾個,累加起來。

真難一遍寫對。。

1 #include2 #include3

using

namespace

std;

4bool islegal(char *s)

8return1;

9}10long

long c[27][27

];11

intmain()

16char str[11

];17 scanf("%s"

,str);

18if(!islegal(str))

22int len=strlen(str);

23long

long res=0;24

for(int i=1; i26

][i];

25bool vis[26]=;

26for(int i=0; ii)

34 res+=c[cnt][len-i-1

];35

}36 vis[str[i]-'

a']=1;37

}38 printf("

%lld

",res+1

);39

return0;

40 }

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 給你乙個字母或單詞,問你它的編號 以樹狀的結構來分析這道題會比較直觀。按照樹的節點依次編號,每個字母或單詞就落在乙個節點上。要求乙個單詞的編號,比較直接的想法...