http://code.bupt.edu.cn/problem/p/91/
#include<stdio.h>
#include<string.h>
#include<string>
#include<vector>
#include<iostream>
using namespace std;
struct pp
{
string name;//目录名
int no;//目录编号
vector<int> c;//子目录编号
vector<string> v;//目录下的文件名
};
int main()
{
int N;
scanf("%d",&N);
for(int k=1;k<=N;k++)
{
int n;
scanf("%d",&n);
pp * s;
s=new pp[101];//初始化一个数组
int num=1;
s[1].name="root";
s[1].no=1;
for(int i=1;i<=n;i++)//n个操作
{
getchar();
char tmp[101];
scanf("%s",tmp);
if(strcmp(tmp,"CREATEFILE")==0)//创建文件
{
char tmp1[101],tmp2[101];
scanf("%s %s",tmp1,tmp2);
string tt=tmp2;
for(int i=1;i<=num;i++)
if(tt==s[i].name)
{
string file=tmp1;
s[i].v.push_back(file);
}
}
else if(strcmp(tmp,"CREATEDIR")==0)//创建目录
{
char tmp1[101],tmp2[101];
scanf("%s %s",tmp1,tmp2);
string tt=tmp2;
for(int i=1;i<=num;i++)
if(tt==s[i].name)
{
s[num+1].name=tmp1;
s[num+1].no=num+1;
s[i].c.push_back(num+1);
num++;
}
}
else if(strcmp(tmp,"LISTFILE")==0)//打印目录下文件
{
char tmp1[101];
scanf("%s",tmp1);
string tt=tmp1;
for(int i=1;i<=num;i++)
if(tt==s[i].name)
for(int j=0;j<s[i].v.size();j++)
cout<<s[i].v[j]<<endl;
}
else if(strcmp(tmp,"LISTDIR")==0)//打印目录下的目录
{
char tmp1[101];
scanf("%s",tmp1);
string tt=tmp1;
for(int i=1;i<=num;i++)
if(tt==s[i].name)
for(int j=0;j<s[i].c.size();j++)
cout<<s[s[i].c[j]].name<<endl;
}
else
;
}
}
//system("pause");
return 0;
}