模拟题,map搞一搞。要想清楚一个结点应该是要通过一个字符串找到下一个结点,题目保证所以文件夹非空,所以只要判断一个结点是不是叶子结点就可以判断它是不是文件,用了点c11的特性。
#includeusing namespace std;typedef map Node;map ::iterator it_id;const int maxnd = 1e4;Node nds[maxnd];int nds_cnt;#define MP make_pair#define fi first#define se secondinline 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< < >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< <<' '< <