制限時間:1000msのメモリ制限:30000K
総提出:3153受理:1414
説明
送信と記憶情報が利用可能なスペースを最大限に活用のためのさまざまなコーディングシステムを必要とするタスクです。周知のシステムは、数、文字列に関連付けられていることです。言葉だけで英語のアルファベットのA、B、C、...、Z(26文字)の小さな文字で構成されていることが考えられます。すべてのこれらの言葉から、我々は、その文字(各文字は次の文字よりも小さい)lexigraphical順になっているものをのみを検討してください。
コーディングシステムは、このように動作します:
単語はその長さの増加順に配列されてます。
•同じ長さの単語は辞書順(辞書順)に配置されています。
次のように•我々は、で始まる、それらの番号によってこれらの言葉を成文化:
- 1
、B - 2
...
Z - 26
AB - 27
...
AZ - 51
BC - 52
...
VWXYZ - 83681
...
それは、この符号化方式に応じて成文化することができた場合に与えられた単語のために指定します。肯定的な場合のためにそのコードを指定します。
入力
のみの行は、単語が含まれています。いくつかの制約があります:
単語•最大10文字の長さである
英語のアルファベットは26文字が含まれている•。
出力は、
単語が成文化することができない場合は出力が与えられた単語、または0のコードが含まれます。
サンプル入力
BF
サンプル出力
55
ソース
ルーマニアOI 2002
//
する#include < iostreamの > 使用して名前空間 はstdを、静的INT C [ 30 ] [ 30 ]。INT メイン(int型 ARGC、 チャー*の ARGV []){ チャー ワード[ 15 ]。 scanf関数(" %sの" 、単語)。int型 のlen = strlen関数(ワード)。以下のために (int型 I = 1 ; iは < LEN。
++ I)の
場合 (単語[I - 1 ] > = ワード[I])
{
COUT << 0 << ENDL。リターン0 ; }。 C [ 0 ] [ 0 ] = 1 。以下のために (int型 I = 1 ; iは < 30 ; ++ I)のために (int型 J = 0 ; J <= I; ++ j)は C [I] [J] =
(J == 0 ) ? C [I - 1 ] [J]:C [I - 1 ] [J - 1 ] + C [I - 1 ] [J]。 符号なしの 長いロング コード = 0 。以下のために (int型 I = 1 ; iは < LEN; ++ I)コード + = C [ 26 ] [I]。以下のために (int型 I = 0 ; iは < LEN; ++ I) {
チャー C = (I == 0 ) ? ' A ' :ワード[I - 1 ] + 1 。用(; C <= ワード[i]は - 1 ; ++ C) コード + = C [ ' Z ' - C] [LEN - 1 - I]; } ++ コード。 coutの << コード << てendl; リターン0 ; }
ます。https://www.cnblogs.com/asuran/archive/2009/10/16/1584249.htmlで再現