好吧,调了好久还是没看出逻辑哪错了,最后只有60分,果然越复杂的函数出的bug越隐秘 看了其他人的写法发现也挺简单的,我用的数据结构复杂了,虽然思路一致,但出错了很难调
#include<bits/stdc++.h>
#define MAX 0x7fffffffffffffff
using namespace std;
struct node{
string name;
long long file_class;
long long ld,lr;//目录配额和后代配额
long long r_size,d_size; //r_size 复用为普通文件大小
vector<node*> list;
};
enum{
FIL,DIR
};
//创建文件时,生成目录开始结点
node * Start_dir=NULL;
node *root= new node({
"root",DIR,MAX,MAX,0,0});
string ex_path(string &path)//路径解析器 匹配 路径 /[a-z0-9//]+
{
long long i;
for( i=1;i<path.length();i++)
if(path[i]=='/')
break;
if(i==path.length()) //当前目录创建
{
if(i>1)
path=path.substr(1,i-1);//文件名
return "now";
}
string str=path.substr(1,i-1);
path=path.substr(i,path.length()-i);//解析完后剩余路径
return str;
}
node * Create_node(string name,long long file_class,long long r_size=0,long long d_size=0,long long ld=MAX,long long lr=MAX)
{
node * p=new node({
name,file_class,ld,lr,r_size,d_size});
return p;
}
void Delete_node(node * Cur) //删除这个文件的所有后代,不包括自己
{
if(Cur->file_class==DIR)
{
long long len=Cur->list.size();
for(long long i=0;i<len;i++)
{
Delete_node(Cur->list[i]);
delete Cur->list[i];
}
}
return;
}
bool Create_file(node * Cur,string cmd,long long fs,long long &dis) //返回的是执行该命令后文件的变化大小
{
//cout<<cmd<<" s "<<fs<<endl;
string name=ex_path(cmd);//路径名
if(name=="now")
{
long long len=Cur->list.size() ;
for(long long i=0;i<len;i++)
{
if(Cur