http://acm.pku.edu.cn/JudgeOnline/problem?id=1057
Код:
#include <iostream> #include <algorithm> #include <vector> #include <string> using namespace std; string s; struct Directory { string name; vector<Directory> menu; vector<string> files; }; void build(Directory& t, string s) { if(s == "*" || s == "]") return; if(s[0] == 'f') { t.files.push_back(s); cin >> s; build(t, s); } else { Directory d; d.name = s; cin >> s; build(d, s); t.menu.push_back(d); cin >> s; build(t, s); } } void printLayer(int layer) { for(int i = 0; i < layer; ++i) cout << "| "; } void print(Directory& t, int layer) { printLayer(layer); cout << t.name << endl; for(unsigned int i = 0; i < t.menu.size(); ++i) print(t.menu[i], layer+1); sort(t.files.begin(), t.files.end()); for(unsigned int i = 0; i < t.files.size(); ++i) { printLayer(layer); cout << t.files[i] << endl; } } int main() { string s; int cnt = 0; while(1) { cin >> s; if(s == "#") break; Directory d; d.name = "ROOT"; printf("DATA SET %d:\n", ++cnt); build(d, s); print(d, 0); cout << endl; } return 0; }