題目問乙個合法字串的字典序是第幾個,合法的字串是指裡面的字元嚴格遞增。
先判斷合不合法,然後用類似康托展開的過程去求。大概過程就是用組合數算出某長度某字首有幾個,累加起來。
真難一遍寫對。。
1 #include2 #include3using
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 給你乙個字母或單詞,問你它的編號 以樹狀的結構來分析這道題會比較直觀。按照樹的節點依次編號,每個字母或單詞就落在乙個節點上。要求乙個單詞的編號,比較直接的想法...