1777:文件结构“图”

总时间限定: 
1000ms

内部存款和储蓄器限制: 
65536kB

描述
在电脑上收看文件系统的协会日常很有用。Microsoft
Windows上面的”explorer”程序便是那般的2个事例。然则在有图形界面在此以前,没有图形化的意味方法的,那时候最好的主意是把目录和文件的组织显示成多少个”图”的楷模,而且接纳缩排的样式来代表目录的结构。比如:

ROOT
|     dir1
|     file1
|     file2
|     file3
|     dir2
|     dir3
|     file1
file1
file2

这一个图说明:ROOT目录包含五个子目录和八个文本。第三身长目录包括二个公文,第二个子目录是空的,第几个子目录包罗一个文书。

输入
你的职务是写1个主次读取一些测试数据。每组测试数据表示一个总结机的文件结构。每组测试数据以’*’结尾,而富有合理的输入数据以’#’结尾。一组测试数据包含一些文件和目录的名字(即便在输入中大家从不付诸,然则咱们总倘使ROOT目录是最外层的目录)。在输入中,以’]’表示贰个目录的剧情的终止。目录名字的率先个字母是’d’,文件名字的首先个假名是’f’。文件名只怕有扩展名也可能没有(比如fmyfile.dat和fmyfile)。文件和目录的名字中都不蕴含空格,长度都不当先30。七个索引下的子目录个数和文书个数之和不当先30。

输出
在体现多少个索引中内容的时候,先出示个中的子目录(假设有个别话),然后再呈现文件(要是有个别话)。文件供给根据名字的字母表的逐条显示(目录不用依照名字的字母表顺序展现,只需求依照目录出现的主次突显)。对每一组测试数据,大家要先输出”DATA
SET
x:”,这里x是测试数据的编号(从1起先)。在两组测试数据里面要出口叁个空行来隔离。

您须求小心的是,大家利用一个’|’和多个空格来代表出缩排的层系。

样例输入
file1
file2
dir3
dir2
file1
file2
]
]
file4
dir1
]
file3

file2
file1

#

样例输出
DATA SET 1:
ROOT
| dir3
| | dir2
| | file1
| | file2
| dir1
file1
file2
file3
file4

DATA SET 2:
ROOT
file1
file2

提示
一个索引和它的子目录处于差其余层次
三个目录和它的当中的文书处于同一层次

来源
翻译自 Pacific Northwest 1998 的试题

 

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 using namespace std;
 5 string a;
 6 int cc;//输出深度
 7 int now=1;//记录当前*数量 
 8 int flag=0;
 9 void work()
10 {
11     string str[50];//储存该目录下的文件 
12     int l=0;
13     while(cin>>a)
14     {
15         if(flag==0&&a[0]!='#')
16         {
17             cout<<"DATA SET "<<now<<":"<<endl;
18             cout<<"ROOT"<<endl;
19             flag=1;
20         }
21         if(a[0]=='#')
22         return;
23         else if(a[0]=='*')
24         {
25             cc=0;
26             sort(str+0,str+l);
27             for(int i=0;i<l;i++)
28             {
29                 cout<<str[i]<<endl;
30             }
31             cout<<endl;
32             now++;
33             //cout<<"DATA SET "<<now<<":"<<endl;
34             //cout<<"ROOT"<<endl;
35             flag=0;
36             work();
37         }
38         else if(a[0]=='d')
39         {
40             //cc++;
41             //str[l]=a;
42             //l++;
43             cc++;
44             for(int i=1;i<=cc;i++)
45             {
46                 cout<<"|";
47                 for(int j=1;j<=5;j++)
48                 cout<<" ";
49             }
50             cout<<a<<endl;
51             work();
52         }
53         else if(a[0]=='f')
54         {
55             
56             str[l]=a;
57             l++;
58             continue;
59         }
60         else if(a[0]==']')
61         {
62             
63             sort(str+0,str+l);
64             for(int i=0;i<l;i++)
65             {    
66                 for(int k=1;k<=cc;k++)
67                 {    
68                     cout<<"|";
69                     for(int j=1;j<=5;j++)
70                     cout<<" ";
71                 }
72                 cout<<str[i]<<endl;
73             }
74             cc--;
75             return;
76         }
77     }
78 }
79 int main()
80 {
81     //freopen("r.txt","r",stdin);
82     //freopen("w.txt","w",stdout);
83     work();
84     return 0;
85 }

 

14:求10000以内n的阶乘

总时限: 
5000ms

内部存款和储蓄器限制: 
655360kB

描述
求10000以内n的阶乘。

输入
唯有一行输入,整数n(0<=n<=一千0)。

输出
一行,即n!的值。

样例输入
100

样例输出
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

来源
JP06

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 using namespace std;
 6 int a[1000001]={1};
 7 int ans[10000001]={1};
 8 char n[1001];
 9 int en[1001];
10 int main()
11 {
12     int n;
13     cin>>n;
14     int lans=1;
15     int x=0;
16     for(int i=1;i<=n;i++)
17     {
18         
19         for(int j=0;j<lans;j++)
20         {
21             a[j]=a[j]*i+x;
22             x=a[j]/10;
23             if(x>0&&j==lans-1)
24             lans++;
25             a[j]=a[j]%10;
26         }
27     }
28     int flag=0;
29     for(int i=lans;i>=0;i--)
30     {
31         if(a[i]==0&&flag==0)
32         continue;
33         else flag=1;
34         cout<<a[i];
35     }
36     return 0;
37 }