题意:模拟数据库系统,给你文件及其对应关系,画出图形。以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 }