00037:Problem F 相对距离
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
Wu Kuan是一名狂热的Unix\Linux爱好者,并且十分痛恨GUI,觉得操作系统就应该是命令行下开发的,这样才有Geek的感觉。Wu Kuan当然不会放过任何机会来给大家洗脑关于Unix\Linux的哲学。
开发人员信条
-
l 小即是美
-
l 让每个程序只做好一件事情
-
l 尽快的建立原型
-
l 舍高效率而取可移植性
-
l 使用纯文本来存储数据
-
l 充分利用软件的杠杆效应
-
l 使用Shell脚本来提高杠杆效应和可移植性
-
l 避免强制性的用户界面
-
l 让每一个程序都成为过滤器
Unix\Linux次要准则
-
l 允许用户制定环境
-
l 尽量使操作系统内核小而轻巧
-
l 使用小写字母,并尽量保持简短
-
l 保护树木
-
l 沉默是金
-
l 并行思考
-
l 各部分之和大于整体
-
l 寻找90%的解决方案
-
l 更坏的就是更好
-
l 层次化思考
当然,今天更想讲的是关于层次化思考这个准则,如今在抽象的层次化基础上实现了各种功能繁多的应用程序,Unix\Linux用户和开发人员都喜欢分层次来组织事物,比如Unix的文件系统架构,而发展到现在Unix\Linux的层次思考已经拓展到其他领域,如网络服务命名器、窗口管理、面向对象开发。
接下来我们重点介绍下Unix\Linux的文件系统以及几个基本的Unix\Linux命令;)
Good Luck!

上图中用红色方框圈起来的是我们输入的命令,命令下方对应的是命令的执行情况。
总共出现了3个命令,我们依次解释下
-
l pwd(print working directory)输出当前工作目录
-
l ls(List files)列出文件下的所有文件
-
l cd(change directory)切换目录
解释下图中出现的几个目录
/ 根目录
home/aemonwk/ 某个用户目录
cd /home/aemonwk/ 就是从/ 目录进入到/home/aemonwk目录
.. 当前目录的上一级目录 比如cd.. 就是切换至当前目录的上一级目录。/home/aemonwk的上一级目录是/home
在选手们理解了上述说明后,接下来给出我们的问题。
首先,我们现在假定在Unix/Linux文件系统中的两个目录或文件之前每一层的距离为1
即/home 目录到/home/aemonwk 之间的层次认为是1。
输入
-
- 输入数据包含两行,每行一个Unix/Linux下的文件目录,目录中不包含空格,且目录长度不超过1000。 输出
- 仅输出一个正整数表示给定的两个目录之间的相对距离。 样例输入
-
/etc/vim/home/aemonwk/Documents
样例输出
-
5
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
const int maxn=1000;
char sn[maxn][30],sm[maxn][30];
int main()
{
char s1[maxn],s2[maxn];
while(~scanf("%s%s",s1,s2))
{
memset(sn,0,sizeof(sn));
memset(sm,0,sizeof(sm));
int n=strlen(s1),m=strlen(s2);
int k=0,j=0;
for(int i=0;i<n;i++)
{
if(s1[i]=='/')
{
sn[k++][j]='\0';
j=0;
}
sn[k][j++]=s1[i];
}
sn[k][j]='\0';
int a=k+1;
k=0,j=0;
for(int i=0;i<m;i++)
{
if(s2[i]=='/')
{
sm[k++][j]='\0';
j=0;
}
sm[k][j++]=s2[i];
}
sm[k][j]='\0';
int b=k+1;
int ans=0;
for(int i=0;i<=a-1&&i<=b-1;i++)
{
if(strcmp(sn[i],sm[i])==0)
ans++;
else
break;
}
cout<<a+b-ans*2<<endl;
}
return 0;
}
本文介绍了Unix/Linux操作系统的基本哲学及其文件系统架构。通过具体的命令示例,讲解了如何在Unix/Linux环境下进行目录操作,并提供了一个计算两个目录相对距离的程序示例。

被折叠的 条评论
为什么被折叠?



