| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
贴个代码#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <vector>
using namespace std;
struct T
{
int file;
vector<int> v;
};
T mem[1200000];
map<string,int> mp;
int lm;
char str[12000],cmd[12000],dic[12000],ts[12000];
int cdn,lc;
const int root=0;
int dfs(int x)
{
int cnt,i;
cnt=0;
if (mem[x].file != -1)
return mem[x].file;
for (i=0; i<mem[x].v.size(); i++)
{
cnt+=dfs(mem[x].v[i]);
}
return cnt;
}
int main()
{
int i,j,tn,ls,lts;
bool flag;
while (true)
{
mp.clear();
mem[root].v.clear();
mem[root].file=-1;
cmd[0]='\\';
cmd[1]='\0';
lc=1;
cdn=0;
lm=0;
mp[cmd]=lm;
lm++;
flag=false;
while (true)
{
if (flag == false)
{
gets(str);
// printf("%s\n",str);
}
// printf("cmd=%s\n",cmd);
flag=false;
if (str[0] == '>' && str[1] == 'c' && str[2] == 'd')
{
sscanf(str,"%s%s",ts,dic);
/* printf("ts=%s dic=%s \n",ts,dic); */
if (strcmp(dic,"..") == 0)
{
lc=strlen(cmd);
while (cmd[lc-2] != '\\')
lc--;
lc--;
cmd[lc]='\0';
cdn=mp[cmd];
}
else
{
if (dic[0] == '\\')
{
cmd[0]='\\';
cmd[1]='\0';
lc=1;
cdn=0;
strcpy(dic,dic+1);
}
if (dic[0] == '\0')
continue;
for (i=0,j=0; ; i++)
{
if (dic[i] == '\\' || dic[i] == '\0')
{
ts[j]='\\';
j++;
ts[j]='\0';
// printf("ts=%s\n",ts);
strcpy(ts,strcat(cmd,ts));
// printf("ts=%s\n",ts);
if (mp.find(ts) == mp.end())
{
mp[ts]=lm;
mem[lm].file=-1;
mem[lm].v.clear();
mem[cdn].v.push_back(lm);
strcpy(cmd,ts);
cdn=lm;
lm++;
}
else
{
strcpy(cmd,ts);
cdn=mp[cmd];
}
if (dic[i] == '\\')
j=0;
else
break;
}
else
{
ts[j]=dic[i];
j++;
}
}
}
}
else if (str[0] == '>' && str[1] == 'd' && str[2] == 'i')
{
flag=true;
while (true)
{
gets(str);
ls=strlen(str);
if (str[0] == '>')
break;
for (i=0; str[i]; i++)
{
if (str[i] == ' ')
break;
}
if (str[i] == '\0')
{
str[ls]='\\';
ls++;
str[ls]='\0';
strcpy(dic,cmd);
strcat(dic,ts);
if (mp.find(dic) == mp.end())
{
mp[dic]=lm;
mem[lm].file=-1;
mem[lm].v.clear();
mem[cdn].v.push_back(lm);
lm++;
}
}
else
{
sscanf(str,"%s%d",ts,&tn);
lts=strlen(ts);
ts[lts]='\\';
lts++;
ts[lts]='\0';
strcpy(dic,cmd);
strcat(dic,ts);
if (mp.find(dic) == mp.end())
{
mp[dic]=lm;
mem[lm].file=tn;
mem[lm].v.clear();
mem[cdn].v.push_back(lm);
lm++;
}
}
}
}
else if (str[0] == '>' && str[1] == 'd' && str[2] == 'e')
{
sscanf(str,"%s%s",ts,dic);
if (dic[0] == '\\')
{
strcpy(cmd,dic);
lc=strlen(cmd);
cmd[lc]='\\';
lc++;
cmd[lc]='\0';
}
else
{
strcpy(cmd,strcat(cmd,dic));
lc=strlen(cmd);
cmd[lc]='\\';
lc++;
cmd[lc]='\0';
}
if (mp.find(cmd) == mp.end())
printf("0\n");
else
{
cdn=mp[cmd];
printf("%d\n",dfs(cdn));
}
break;
}
else if (str[0] == '>' && str[1] == 'e')
{
return 0;
}
}
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator