問題の説明
情報を送信し、暗記すると、使用可能なスペースを最大限使用するために異なる符号化システムを必要とするタスクです。周知のシステムは、数、文字列に関連付けられていることです。言葉だけで英語のアルファベットのA、B、C、...、Z(26文字)の小さな文字で構成されていることが考えられます。すべてのこれらの言葉から、我々は、その文字(各文字は次の文字よりも小さい)lexigraphical順になっているものをのみを検討してください。
コーディングシステムは、このように動作します:
単語はその長さの増加順に配置されています。
同じ長さの単語は辞書順(辞書順)に配置されています。
次のように我々は、で始まる、その番号によってこれらの言葉を成文化:
- 1
B - 2
...
Z - 26
AB - 27
...
AZ - 51
BC - 52
...
VWXYZ - 83681
...
それは、この符号化方式に応じて体系化することができれば、所与の単語に指定します。肯定的な場合のためにそのコードを指定します。
コーディングシステムは、このように動作します:
単語はその長さの増加順に配置されています。
同じ長さの単語は辞書順(辞書順)に配置されています。
次のように我々は、で始まる、その番号によってこれらの言葉を成文化:
- 1
B - 2
...
Z - 26
AB - 27
...
AZ - 51
BC - 52
...
VWXYZ - 83681
...
それは、この符号化方式に応じて体系化することができれば、所与の単語に指定します。肯定的な場合のためにそのコードを指定します。
入力
唯一の行は、単語が含まれています。いくつかの制約があります:
単語は、最大10文字の長さである
英語のアルファベットは26の文字があります。
単語は、最大10文字の長さである
英語のアルファベットは26の文字があります。
出力
単語を体系化することができない場合、出力は、所与のワード、または0のコードを含むであろう。
サンプル入力
BF
サンプル出力
55
************************************************** ************************************************** ************************************************** ************************************************** *******
組合せ論
詳述
数学的推論
************************************************** ************************************************** ************************************************** ************************************************** *********
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <CStringの> 4 使って 名前空間STDを、 5 int型の C [ 27 ] [ 27 ]。 6 ボイドのinit()// 初始化组合数 7 { 8 INT I、J。 9 のためには、(i = 0 ; iが= < 26 ; iは++ ) 10 { 11 用(J = 0 ; J <= I; J ++ ) 12 { 13 であれば(!J || I == j)は 14個の C [i]は[J] = 1 。 15個の 他の 16 C [I] [J] = Cの[I- 1 ] [J- 1 ] + C [I- 1 ] [J]。 17 } 18 } 19 リターン。 20 } 21 のint main()の 22 { 23 のinit(); 24の チャー S [ 17 ]。 25 int型I、J。 26 のscanf(" %sの" 、S); 27 INT LEN =のSTRLEN(S) 28 以下のための(I = 1 <; IがLEN I ++は) 29 { 30 IF(S [I- 1。 = S [I])> // 条件を満たさない 31は { 32 のprintf(" N- 0 \ " ); 33は、 戻り 0を、 34である } 35 } 36 のint SUM = 0 ; 37 のための(I = 1 ; Iは、LEN <; Iは++)// 等しくない長さの前に一緒に入れて 38れる { 39 SUM = C + [ 26である] [I]; 40 } 41である ため(I = 0 ; IはLEN <; Iは++)// この場合は、限り ある42 { 43である CHAR CH =(I == 0?' A ':S [I- 1 ] + 。1 ) 44は 、一方(CH <= Sは、[I]は- 1)// 追加列挙 45 { 46は、 SUM = C + [ ' Z ' -CH] [LEN 。1 - ; I]は 47 ++ CH ; 48 } 49 } 50 のprintf(" %Dを\ n "、和+ 1 )。 51 リターン 0 。 52 }
ます。https://www.cnblogs.com/sdau--codeants/p/3525947.htmlで再現