蒟蒻36pts求调
查看原帖
蒟蒻36pts求调
583610
DrAlfred楼主2022/12/1 21:30
#include <bits/stdc++.h>
#define  ll long long
using namespace std;
string s;
int n, f, t;
map<string, ll> folderSize;
map<string, set<string>> fileTree;
inline void mount(string name) {
    string father = "/", curr;
    for (size_t i = 1; i < name.size(); i++) {
        if (name[i] == '/') {
            fileTree[father].insert(curr);
            folderSize[father] += f;
            father = father + curr + '/';
            curr = "";
        }
        else {
            curr += name[i];
        }
    }
    folderSize[father] += f;
}
inline void printTree(string name) {
    if (fileTree[name].size() == 0) {
        // 没法展开
        printf("%s %lld\n", name.c_str(), folderSize[name]);
        return;
    }
    bool flag = false;
    for (auto conn : fileTree[name]) {
        // 找子文件夹, 有没有>=t的
        if (folderSize[name + conn + '/'] >= t) {
            flag = true;
            break;
        }
    }
    if (flag) {
        printf("- %s %lld\n", name.c_str(), folderSize[name]);
        for (auto conn : fileTree[name]) {
            printTree(name + conn + '/');
        }
        // 去print
    }
    else {
        // 只输出当前
        printf("+ %s %lld\n", name.c_str(), folderSize[name]);
    }
}
int main(int argc, char const *argv[]) {
    ios::sync_with_stdio(false);
    cin >> n;
    while (n--) {
        cin >> s >> f;
        mount(s);
    }
    cin >> t;
    // printDepthTree("/", 0);
    printTree("/");
    system("pause");
    return 0;
}

2022/12/1 21:30
加载中...