• 【1-2】字典序问题


    ´问题描述:
    在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表 A 由 26 个小
    写英文字母组成 A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到
    右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现 1 次。例如,
    a,b,ab,bc,xyz 等字符串都是升序字符串。现在对字母表 A 产生的所有长度不超过 6 的升序
    字符串按照字典序排列并编码如下。
    1 2 … 26 27 28 …
    a b … z ab ac …
    对于任意长度不超过 6 的升序字符串,迅速计算出它在上述字典中的编码。
    ´编程任务:
    对于给定的长度不超过 6 的升序字符串,编程计算出它在上述字典中的编码。
    ´数据输入:
    输入数据由文件名为 input.txt 的文本文件提供。
    文件的第一行是一个正整数 k,表示接下来共有 k 行。
    接下来的 k 行中,每行给出一个字符串。
    ´结果输出:
    程序运行结束时,将计算结果输出到文件 output.txt 中。文件共有 k 行,每行对应于一
    个字符串的编码。
    输入文件示例 输出文件示例
    input.txt output.txt
    2
    a
    b
    1
    2

    【题解】

    一开始字符串为空. 然后从长度为i-1的字符串里面按照字典序的顺序取出来s 然后在s后面加上一个合适的字符生成长度为i的字符串即可。 最后遍历一遍用map给每个字符串标号

    【代码】

    #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;
    }
    
    
  • 相关阅读:
    BZOJ 3085: 反质数加强版SAPGAP
    BZOJ 1053 [HAOI2007]反素数ant
    强化学习一:Introduction Of Reinforcement Learning
    BZOJ 2120: 数颜色
    2018暑假多校(杭电 + 牛客)
    算法笔记--可持久化线段树
    牛客练习赛22 简单瞎搞题
    BZOJ 1047: [HAOI2007]理想的正方形
    算法笔记--二项式反演
    BZOJ 1010: [HNOI2008]玩具装箱toy
  • 原文地址:https://www.cnblogs.com/AWCXV/p/11615595.html
Copyright © 2020-2023  润新知