CodeForces 66C Petya and File System (实现)

模拟题,map搞一搞。要想清楚一个结点应该是要通过一个字符串找到下一个结点,题目保证所以文件夹非空,所以只要判断一个结点是不是叶子结点就可以判断它是不是文件,用了点c11的特性。

#include<bits/stdc++.h>
using namespace std;

typedef map<string,int> Node;
map<string,int>::iterator it_id;
const int maxnd = 1e4;
Node nds[maxnd];
int nds_cnt;
#define MP make_pair
#define fi first
#define se second

inline int id(const string& s,Node& fa)
{
    if((it_id = fa.find(s)) != fa.end()) return it_id->second;
    fa.insert(MP(s,++nds_cnt));
    return nds_cnt;
}

int curFile,curFolder;
void dfs(int u)
{
    for(auto it: nds[u]){
        if(nds[it.se].empty()) { curFile++; continue; }
        else curFolder++;
        dfs(it.se);
    }
}

#define cer(x) cout<<x<<endl;
#define PB push_back

int main()
{
    //freopen("in.txt","r",stdin);
    ios_base::sync_with_stdio(false);
    string s;
    while(cin>>s){
        auto u = nds;
        u = nds+id(s.substr(0,1),*u);
        s.PB('\\');
        for(int i = 3, j = 3; i < (int)s.size(); i++){
            if(s[i] == '\\'){
                u = nds+id(s.substr(j,i-j),*u);
                j = i+1;
            }
        }
    }
    int maxFolder = 0,maxFile = 0;

    for(auto it: nds[0]){
        for(auto it2: nds[it.se]){
            curFolder = curFile = 0;
            dfs(it2.se);
            maxFolder = max(maxFolder,curFolder);
            maxFile = max(maxFile,curFile);
        }
    }
    cout<<maxFolder<<' '<<maxFile<<endl;
    return 0;
}

 

posted @ 2015-09-05 23:09  陈瑞宇  阅读(247)  评论(0编辑  收藏  举报