这个题我们又把题意理解错了,队友翻译了以后给我解释,我问这个直接一个单词开头的是要找到这个文件夹吗,他说是,然后我就呵呵了..奔着树形结构去和字符串维护就去了...做了好久都没模拟出来,感觉做出来的人也牛了..重名问题怎么解决的啊....但是!!!!
其实没有那么复杂,题目中总共有三种情况:以"/"开头是指新建一个根目录,以前清空就行了,".."是返回上一层的文件夹,"单词开头"就是在停在的文件夹处建立这个单词所描述的文件夹,可以与父亲重名.与常识完全符合.这种操作方法是Linux操作系统里面的,题目让我们模拟过程输出路径,Linux学的人会对这个题很有感觉,而且这个题是CCF认证的一道题,真是应了那句话,题读懂了就简单,读不懂就难啊.
下面是代码,我使用栈维护并输出.
#include<iostream> #include<cstdio> #include<stack> #include<cstring> using namespace std; stack<string>s1;///用于存储 stack<string>s2;///用于输出 int main() { int t; scanf("%d",&t); while(!s1.empty()) s1.pop(); while(!s2.empty()) s2.pop(); while(t--) { string op; cin>>op; if(op[0] == 'p') { cout<<"/"; while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } while(!s2.empty()) { cout<<s2.top(); s1.push(s2.top());///这个要加上去,因为我不会遍历栈的元素.. s2.pop(); } cout<<endl; } else { string a; cin>>a; int leno = a.length(); a[leno++] = '/'; a[leno] = '