C. Cd and pwd commands

Time Limit: 20 Sec

Memory Limit: 256 MB

题目连接

http://codeforces.com/problemset/problem/158/C

Description

Vasya is writing an operating system shell, and it should have commands for working with directories. To begin with, he decided to go with just two commands: cd (change the current directory) and pwd (display the current directory).

Directories in Vasya's operating system form a traditional hierarchical tree structure. There is a single root directory, denoted by the slash character "/". Every other directory has a name — a non-empty string consisting of lowercase Latin letters. Each directory (except for the root) has a parent directory — the one that contains the given directory. It is denoted as "..".

The command cd takes a single parameter, which is a path in the file system. The command changes the current directory to the directory specified by the path. The path consists of the names of directories separated by slashes. The name of the directory can be "..", which means a step up to the parent directory. «..» can be used in any place of the path, maybe several times. If the path begins with a slash, it is considered to be an absolute path, that is, the directory changes to the specified one, starting from the root. If the parameter begins with a directory name (or ".."), it is considered to be a relative path, that is, the directory changes to the specified directory, starting from the current one.

The command pwd should display the absolute path to the current directory. This path must not contain "..".

Initially, the current directory is the root. All directories mentioned explicitly or passed indirectly within any command cd are considered to exist. It is guaranteed that there is no attempt of transition to the parent directory of the root directory.

Input

The first line of the input data contains the single integer n (1 ≤ n ≤ 50) — the number of commands.

Then follow n lines, each contains one command. Each of these lines contains either command pwd, or command cd, followed by a space-separated non-empty parameter.

The command parameter cd only contains lower case Latin letters, slashes and dots, two slashes cannot go consecutively, dots occur only as the name of a parent pseudo-directory. The command parameter cd does not end with a slash, except when it is the only symbol that points to the root directory. The command parameter has a length from 1 to 200 characters, inclusive.

Directories in the file system can have the same names.

Output

For each command pwd you should print the full absolute path of the given directory, ending with a slash. It should start with a slash and contain the list of slash-separated directories in the order of being nested from the root to the current folder. It should contain no dots.

Sample Input

7
pwd
cd /home/vasya
pwd
cd ..
pwd
cd vasya/../petya
pwd

Sample Output

/
/home/vasya/
/home/
/home/petya/

HINT

题意

俩操作

cd 改变路径

pwd输出路径

..就是返回到上一级

题解:

模拟一下就好了~

代码

#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define test freopen("test.txt","r",stdin)
#define maxn 1050005
#define mod 10007
#define eps 1e-9
const int inf=0x3f3f3f3f;
const ll infll = 0x3f3f3f3f3f3f3f3fLL;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
//************************************************************************************** int n,z;
string c,s,p="/";
int main()
{
cin>>n;
for(int i=;i<=n;i++)
{
cin>>c;
if(c=="cd")
{
cin>>c;
c+="/";
if(c[]=='/')
{
p="/";
z=;
}
for(int j=z;j<c.size();j++)
{
if(c[j]=='.'&&c[j+]=='.'&&c[j+]=='/')
{
int k=p.size()-;
p[k+]='\0';
p.resize(p.size()-);
while(p[k]!='/')
{
p[k]='\0';
k--;
p.resize(p.size()-);
}
j+=;
}
else
{
p+=c[j];
} }
z=;
}
if(c=="pwd")
cout<<p<<endl;
} }

最新文章

  1. svn: E155004 is already locked 解决方案
  2. Oracle ITL(Interested Transaction List)理解
  3. js的工作原理
  4. HTTP状态码(HTTP Status Code)及常用场景
  5. Html-Css-iframe的使用
  6. Java集合框架中List接口的简单使用
  7. 批量传递ID数组字符串到后台的处理
  8. 【leetcode❤python】119. Pascal&#39;s Triangle II
  9. 在Windows下忘记MySQL最高用户权限密码的解决方案
  10. linux下如何导入导出MySQL数据库
  11. How to Be Good at Mathematics
  12. maven插件开发(二)
  13. 转-----EasyCHM制作教程
  14. javascript的继承种类
  15. ERROR:scala:Error:Object scala.runtime in compiler mirror not found
  16. Linux登录失败:Too many logins for &#39;username&#39;.
  17. MySQL主主复制、主从复制
  18. ActiveMQ专题2: 持久化
  19. C++ 后台进程 daemon
  20. 根据Bootstrap的Modal开发的提示框

热门文章

  1. 通过HttpClient来调用Web Api接口
  2. 已经被cocos2dx给折腾的想要放弃它,专注Unity3D的怀抱了!
  3. SORT UNIQUE|AGGREGATE|GROUP BY|ORDER BY|JOIN
  4. JSON 教程学习进度备忘
  5. python中的文件
  6. php时间函数
  7. bzoj 2190 [SDOI2008]仪仗队(欧拉函数)
  8. XAML概览 1(译自JeremyBytes.com)
  9. FlatBuffers要点
  10. Cloudera Manager5安装总结遇到问题及解决办法