北京赛区(2016)网络赛 A题 The Book List

来源:互联网 发布:mysql 年月日时分秒 编辑:程序博客网 时间:2024/05/21 07:47
char ch[105];typedef struct node* Node;struct node{string name;vector<Node> nxt;vector<Node> child;};Node newnode(){Node a = (Node)new node;return a;}vector<string> save;void build(Node rt, int tail){int lev = 0, i;Node last = rt;while (lev < tail - 1){for (i = 0; i < last->nxt.size(); i++)if (last->nxt[i]->name == save[lev]){break;}if (i < last->nxt.size()){last = last->nxt[i];}else{Node now = newnode();now->name = save[lev];last->nxt.push_back(now);last = now;}lev++;}if (lev == tail - 1){for (int i = 0; i < last->child.size(); i++)if (last->child[i]->name == save[lev])return;Node now = newnode();now->name = save[lev];last->child.push_back(now);}}bool cmp(Node a, Node b){return a->name<b->name;}void visit(Node root,int lev){if (lev > 0){for (int i = 0; i < 4 * (lev - 1); i++)putchar(' ');cout << root->name << endl;}sort(root->nxt.begin(), root->nxt.end(), cmp);sort(root->child.begin(), root->child.end(), cmp);for (int i = 0; i < root->nxt.size(); i++)visit(root->nxt[i], lev + 1);for (int i = 0; i < root->child.size(); i++)visit(root->child[i], lev + 1);}void free(Node root, int lev){for (int i = 0; i < root->child.size(); i++)free(root->child[i], lev + 1);for (int i = 0; i < root->nxt.size(); i++)free(root->nxt[i], lev + 1);delete(root);}void data_in(){}void solve(){}int main(){int cas = 0;while (gets(ch)){Node root = newnode();while (strcmp(ch, "0") != 0){int len = strlen(ch), pos = 0;save.clear();while (pos<len){while (ch[pos] == '/')pos++;string str = "";while (ch[pos] != '/'&&pos < len)str += ch[pos], pos++;save.push_back(str);}build(root, save.size());gets(ch);}printf("Case %d:\n", ++cas);visit(root, 0);free(root, 0);}return 0;}

0 0