• 【2019csp模拟】文件列表


    [2019csp模拟] 文件列表

    题目描述

    生成像 cmd 里 "tree" 指令一样的树,要求如下:

    生成的列表格式有如下要求:

    1.属于同一层的文件或文件夹位于相同的缩进处,相邻两层文件间差距 5 个字
    符;
    2.每个文件夹或文件前有 4 个'-'(根目录除外),文件夹下方属于文件夹的部分有
    '|';
    3.属于统一文件夹下的文件或子文件夹按字典序排列;

    如图:

    (mathbb{Solution:})

    就是一个暴力题,直接按题意做即可,可以对于文件夹递归解决。

    最好是存 vector + map,可以简便地字典序排序。

    (mathbf{Code:})

    #include <bits/stdc++.h>
    #define mp(x, y) make_pair(x, y)
    const int N = 51;
    using namespace std;
    int n;
    string s;
    inline char readc() { char c = getchar(); for (; (c < 'a' || c > 'z') && c != '/'; c = getchar()); return c; }
    std::map<pair<string, string>, std::vector<string> > F;
    inline void Print(string u, string la, string sig) {
        for (int i = 0; i < (int)F[mp(u, sig)].size(); ++i) {
            string v = F[mp(u, sig)][i];
            cout << (u == "" ? "" : la + "----") << v << endl;
            Print(v, la + (u == "" ? "" : "    |"), sig + v);
        }
    }
    int main(void) {
    	freopen("file.in", "r", stdin), freopen("file.out", "w", stdout);
        scanf("%d", &n), F.clear(), F[mp("", "")].clear();
        for (int i = 1; i <= n; ++i) {
            cin >> s; string la = "", t = "", sign = "", sl = "";
            for (int j = 0; j < (int)s.size(); ++j)
                if (s[j] != '/') t += s[j], sign += s[j];
                else {
                    if (F.count(mp(t, sign))) { la = t, sl = sign, t = ""; continue; }
                    F[mp(la, sl)].push_back(t), F[mp(t, sign)].clear(), la = t, sl = sign, t = "";
                }
            if (F.count(mp(t, sign))) { la = t, sl = sign, t = ""; continue; }
            F[mp(la, sl)].push_back(t), F[mp(t, sign)].clear(), la = t, t = "";
        }
        map<pair<string, string>, std::vector<string> >::iterator it;
        for (it = F.begin(); it != F.end(); ++it) { sort((*it).second.begin(), (*it).second.end()); }
        Print("", "|", "");
        return 0;
    }
    
    
  • 相关阅读:
    Linux进程管理及while循环(转)
    AT5661-[AGC040C]Neither AB nor BA【模型转换】
    CF573D-Bear and Cavalry【动态dp】
    关于专人整理和分析需求
    Codeforces 1005D Polycarp and Div 3
    [Luogu]P5513 [CEOI2013]Board
    IDEA Mybatis 中文数据添加到MySQL,显示乱码
    如何比较两个word文档的差异
    抗体计算设计
    抗体
  • 原文地址:https://www.cnblogs.com/yywxdgy/p/13518389.html
Copyright © 2020-2023  润新知