[2-2]辞書式問題

問題の「概要:
多くの場合、データの暗号化とデータの圧縮符号化特別な文字列の必要性。26アルファベット小さなによって与えられる
書き込み英字A = {A、B、... 、Z}。結果としてアルファベット昇順文字列は左からの手紙の文字列を指し、
文字の発生の正しい順序と同じ順序では、アルファベットで表示され、各文字は、最高1回表示されます。例えば、
A、B、ABおよび、BC、XYZ等の文字列文字列を昇順れます。すべての今これ以上上昇6よりによって長さをアルファベット
文字列を辞書式順序として配置し、符号化されます。
26 ... 28 1 27 2である
AB&... Z ... ABおよびACは、
任意の文字列の長さのために、上述した辞書にそのコードを計算急速6上昇を超えません。
「タスクをプログラミング:
指定された文字列の長さが昇順に6を超えないため、それは、上述した辞書を計算するプログラムで符号化されます。
「入力データ:
INPUT.TXTというテキストファイルによって、入力データファイル。
ファイルの最初の行は、正の整数kであり、kは次の行の合計を表します。
次のk行は、各列は、文字列が与えられます。
「出力結果:
実行の終わりには、ファイルoutput.txtとに計算結果を出力します。総ファイルk行に対応する各列
の符号化されたストリング。
例は、サンプル出力ファイル入力ファイル
OUTPUT.TXT INPUT.TXT
2
A
B
1
2

[説明]


ヌル文字列が。開始された
辞書順順序から取り出されたI-1の中の文字列の長さが続い
て、後で私の文字列によ、適切なキャラクタジェネレータを追加します。
最後に、再びマップを参照して各文字列を横断

[コード]

#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
using namespace std;

vector <string> v[7];
unordered_map<string,int> dic;

int main(){
    v[0].push_back("");
    for (int i = 1;i <= 6;i++){
        int len = v[i-1].size();
        for (int j = 0;j < len;j++){
            string temp = v[i-1][j];
            int len2 = temp.size();
            char key = 'a';
            if (temp!=""){
                key = temp[len2-1]+1;
            }
            for (char q = key;q<='z';q++){
                v[i].push_back(""+temp+q);
            }
        }
    }
    int cur = 0;
    for (int i = 1;i <= 6;i++){
        int len = v[i].size();
        for (int j = 0;j < len;j++){
            dic[v[i][j]] = ++cur;
        }
    }
    int k;
    cin >> k;
    while (k--){
        string s;
        cin >> s;
        cout<<dic[s]<<endl;
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/AWCXV/p/11615595.html