CCF 202012 3 帶配額的檔案系統 練習

2021-10-21 11:20:34 字數 2220 閱讀 3756

大模擬,沒涉及什麼演算法主要是資料結構的設計、細節的考慮,挺鍛鍊的,記錄一下,**加了注釋。

#include #include #include #include #include #include using namespace std;

typedef long long ll;

struct file ;

file* root = new file();

// 根據指定分隔符進行分割字串

vectorsplit(string s1, string seperator)

if (posbegin != s.length()) // 指向最後乙個元素,加進來

result.push_back(s.substr(posbegin));

return result;

}// 實際新增檔案

bool addfile(file* f, string filename, ll size)

t = t->parent;

}// 校驗成功

if (flag)

// 校驗失敗

for (int i = 0; i < fs.size(); i ++) else

}return false;

}// 建立檔案時還要額外建立目錄

bool addpath(file* root, vector& path, int index, ll size)

if (addfile(f, path[path.size() - 1], size)) else

}// 更新檔案大小

bool updatefile(file* f, string name, ll size)

bool flag = true;

vectorfs;

while (t != nullptr)

t = t->parent;

}if (flag)

// 校驗失敗 撤銷

for (int i = 0; i < fs.size(); i ++) else

}return false;

}// 檢查建立普通檔案

bool checkc(file* root, vector& path, ll size, int index)

return updatefile(root, path[index], size); // 更新

}if (root->lr != - 1 && root->lr < root->rr + size) return false;

if (root->ld != - 1 && root->ld < root->rd + size) return false;

return addfile(root, path[index], size);

}if (!root->isdir) return false; // 中間路徑不是目錄

if (!root->m.count(path[index]))

return checkc(root->m[path[index]], path, size, index + 1);

}// 刪除

void remove(file* f, vector& path, ll index)

return;

}remove(f->m[path[index]], path, index + 1);

}// 檢查配額

bool checkq(file* root, vector& path, ll d, ll r, int index)

return false;

}if (!root->m.count(path[index]))

if (!root->isdir) return false;

return checkq(root->m[path[index]], path, d, r, index + 1);

}// 單獨驗證給根目錄新增配額

bool checkroot(file* root, ll d, ll r)

int main() else if (type == "r") else if (type == "q")

if (checkq(root, p, ld, lr, 0)) printf("y\n");

else printf("n\n");

} else

}return 0;

}

2020 12 最新獲取證書

1 首先你需要進入 選擇你的環境及外掛程式 2 選擇完成後頁面會進行跳轉,稍等一會。此頁面會有詳細的配置教程 1 環境變數問題 the error was noinstallationerror could not find a usable nginx binary.ensure nginx ex...

山科計算機2020 1,2班程式設計基礎作業5

因為要求多組輸入,所以先來乙個while大迴圈,再套3個for內嵌迴圈 因為要求x include intmain if k 0 printf n if k 0 printf case d no pythagorean triple n i i ps 用此 在oj上會顯示超時,因為用了3個for迴圈...

山科計算機2020 1,2班程式設計基礎作業5

如下 include intmain printf u n sum2 else return0 講道理,這個 我也是從別的地方找的 但我死活不知道這個k 12是怎麼出來的 於是我上網找了找unsigned的取值範圍,自己寫了乙個關於階乘的 想通過試k取值多少的時候會超出範圍 如下 經本人實驗輸入為前...