题意:模拟数据库系统,给你文件及其对应关系,画出图形。以f开头的是文件,以d开头的是文件夹,']'代表文件夹结束,'*'代表样例结束,'#'代表输入结束。

题解:模拟。

View Code
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<vector>
 5 #include<string>
 6 using namespace std;
 7 const int N=10000;
 8 struct data
 9 {
10     char name[100];
11     vector<string> file;
12     vector<int> son;
13     int level;
14     void init(const char * s,int _le)
15     {
16         strcpy(name,s);
17         level=_le;
18         file.clear();
19         son.clear();
20     }
21 } po[N];
22 int dep[N];
23 void dfs(int now)
24 {
25     char st[]={"|     "},tep[1000];
26     tep[0]='\0';
27     int d=po[now].level;
28     while(d--)
29         strcat(tep,st);
30     printf("%s",tep);
31     printf("%s\n",po[now].name);
32     d=po[now].son.size();
33     for(int i=0;i<d;i++)
34         dfs(po[now].son[i]);
35     sort(po[now].file.begin(),po[now].file.end());
36     d=po[now].file.size();
37     for(int i=0;i<d;i++)
38         printf("%s%s\n",tep,po[now].file[i].c_str());
39 }
40 int main()
41 {
42     int ca=0;
43     char s[100];
44     bool flag=true;
45     while(gets(s),strcmp(s,"#")!=0)
46     {
47         if(flag)
48             flag=false;
49         else
50             printf("\n");
51         printf("DATA SET %d:\n",++ca);
52         if(strcmp(s,"*")==0)
53         {
54             printf("ROOT\n");
55             continue;
56         }
57         int depth=0,n=1;
58         memset(dep,0,sizeof(dep));
59         po[0].init("ROOT",0);
60         if(s[0]=='f')
61             po[0].file.push_back(s);
62         else
63         {
64             po[n].init(s,++depth);
65             po[0].son.push_back(n);
66             dep[depth]=n++;
67         }
68         while(gets(s),strcmp(s,"*")!=0)
69         {
70             if(s[0]=='f')
71                 po[dep[depth]].file.push_back(s);
72             else if(s[0]=='d')
73             {
74                 po[dep[depth]].son.push_back(n);
75                 po[n].init(s,++depth);
76                 dep[depth]=n++;
77             }
78             else
79             {
80                 depth--;
81             }
82         }
83         dfs(0);
84     }
85     return 0;
86 }