清华大学历年考研复试机试真题 - 1329. 文件系统
作者:互联网
B君在设计一个文件系统。
B君在这个文件系统里,有 n 个文件夹。
B君想知道表示这 n 个文件夹所在路径的字符串,长度之和是多少。
一个文件夹的路径是,自己和所有祖先文件夹名字,以/分割连接起来,其中最前的一个文件夹前加/,最后一个文件夹后不加/。
比如对于样例,它的文件结构为
Users
wwwwodddd
Documents
Downloads
System
5个文件夹的的路径分别为(按照输入的顺序)
/Users
/Users/wwwwodddd
/Users/wwwwodddd/Documents
/System
/Users/wwwwodddd/Downloads
他们的长度分别是 6,16,26,7,26,所以所有长度和为 81。
特别注意,根目录/不是一个文件夹,他的路径长度不应被计算在最终答案中。每个字符串开头的/不是根目录的意思,这里的/应该被计入答案。
输入格式
输入第一行一个正整数 n,表示一共有 n 个文件夹。
以下 n 行每行描述一个文件夹,第 i 行描述第 i 个文件夹,有一个整数 fi 和一个字符串 si。
fi 表示第 i 个文件夹的父文件夹是第 fi 个文件夹,特别的,如果 fi 为 0,那么说明这个文件夹在根目录。
si 表示第 i 个文件夹的名字,这个名字一定由数字和大小写字母组成。
保证在同一个文件夹下不存在多个文件夹同名,保证每个文件夹的长度至多为12。
输出格式
输出一行一个整数,表示所有路径长度的和。
数据范围
1≤n≤1000,
1≤i≤n,
0≤fi<i
输入样例:
5
0 Users
1 wwwwodddd
2 Documents
0 System
2 Downloads
输出样例:
81
#include <stdio.h>
#include <string.h>
int main(){
int n,i,j,sum=0;
scanf("%d",&n);
int a[n+1],b[n+1]; //a[i]记录第i个文件 单独的长度 b[i]记录第i个文件 路径长度
memset(a,0,sizeof(a)); //初始化只要是为了a[0]=b[0]=0 即根目录长度为0
memset(b,0,sizeof(b));
char t[13];
for(i=1;i<=n;i++){
scanf("%d %s",&j,t);
a[i]=strlen(t)+1; //+1是因为每个文件名前面加一个"\"
b[i]=a[i]+b[j]; //b[j]是其前缀 a[i]是其本身 相加就是其路径长度
sum+=b[i];
}
printf("%d",sum);
return 0;
}
标签:Users,真题,根目录,1329,复试,文件夹,fi,长度,wwwwodddd 来源: https://blog.csdn.net/weixin_49548350/article/details/114295999