#include<bits/stdc++.h>
using namespace std;
struct sj
{
string name;
vector<sj*>SJ;
vector<string>book;
void ib(string temp)
{
for(unsigned int i=0;i<book.size();i++)
if(book[i]==temp) return;
book.push_back(temp);
}
sj* is(string temp)
{
for(unsigned int i=0;i<SJ.size();i++)
if(SJ[i]->name==temp) return SJ[i];
sj* xin=new sj;
xin->name=temp;
SJ.push_back(xin);
return xin;
}
void print(int n)
{
for(int i=0;i<4*n;i++) printf(" ");
cout<<name<<endl;
//sort(SJ.begin(),SJ.end());
for(int i=0;i<int(SJ.size())-1;i++)
for(int j=0;j<int(SJ.size())-i-1;j++)
if(SJ[j]->name>SJ[j+1]->name)
swap(SJ[j],SJ[j+1]);
for(unsigned int i=0;i<SJ.size();i++)
SJ[i]->print(n+1);
sort(book.begin(),book.end());
for(unsigned int i=0;i<book.size();i++)
{
for(int j=0;j<4*(n+1);j++) printf(" ");
cout<<book[i]<<endl;
}
}
};
bool cmp(sj* a,sj* b)
{
return a->name<b->name;
}
char str[110];
int k;
int get(string& temp)
{
while(str[k]!='/'&&str[k]!='\0')
{
temp.push_back(str[k]);
k++;
}
return str[k++]=='\0';
}
int kase;
int main()
{
while(cin.getline(str,110))
{
sj root;
while(1)
{
k=0;
sj* p=&root;
while(1)
{
string name;
int ib=get(name);
if(ib)
{
p->ib(name);
break;
}
else p=p->is(name);
}
cin.getline(str,110);
if(strlen(str)==1&&str[0]=='0') break;
}
printf("Case %d:\n",++kase);
sort(root.SJ.begin(),root.SJ.end(),cmp);
for(unsigned int i=0;i<root.SJ.size();i++)
root.SJ[i]->print(0);
sort(root.book.begin(),root.book.end());
for(unsigned int i=0;i<root.book.size();i++)
cout<<root.book[i]<<endl;
}
return 0;
}
【2016-北京赛区网络赛-A】水题(The Book List,hihocoder 1383)
最新推荐文章于 2018-09-11 21:27:36 发布