Trie樹 資料夾計數

2021-07-26 09:42:56 字數 1687 閱讀 2113

可以用路徑來描述資料夾,路徑為乙個包含若干部分的字串,之間用』/』分隔。每部分均為乙個資料夾的名稱,且表示這個資料夾的父資料夾為前一部分描述的資料夾。

例如:/home/fj/summer表示根目錄下有乙個名稱為home的資料夾,這個home資料夾下有乙個名稱fj的資料夾,這個名稱為fj的資料夾下有。

每個路徑的第1個字元總是』/』,且不會出現兩個連續的』/』,最後乙個字元不會是』/』。而所有資料夾僅包含數字和字母。

現在先給出n個路徑,一開始除了根目錄不存在任何資料夾,在每給出乙個路徑後,對於第i個路徑,你需要輸出的是若要讓第1個路徑到第i個路徑存在,最少需要新建多少個資料夾。

輸入檔案第1行為乙個正整數n。

接下來n行,每行為乙個描述路徑的字串,長度均不超過100。

輸出應包含n行,每行1個正整數,第i行輸出若要使第1個路徑到第i個路徑存在,最少需要新建多少個資料夾。

樣例資料#1

2 /home/fj/summer

/home/fj/123

樣例資料#2

3 /chicken

/chicken/egg

/chicken

樣例資料#3

4 /a

/a/b

/a/c

/b/b

樣例資料#1

3 4

樣例資料#2

1 2

2 樣例資料#3

1 2 3 5

對於所有資料,n<=1000。

對於部分資料,有n<=20;

對於部分資料,有n<=200;

對於部分資料,有對於所有路徑最多存在兩個』/』(包含第1個字元)。

對於每乙個路徑,對』/』中間的字串累加放在trie樹里,當然最後要新增乙個』/』,最後統計單詞個數即可,具體看**

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

inline

const

int get_int()

while(x>='0'&&x<='9')

return num*bj;

}const

int maxn=300000;

struct tree

};struct trie

void insert(string s) else x=tree[x].child[y];

}tree[x].bj=1;

word++;

}int find(string s)

if(tree[x].bj)return x; //有標記域才能返回

else

return -1;

}};trie trie;

int n;

int main() else tmp+=s[i];

tmp+='/';

if(trie.find(tmp)==-1)trie.insert(tmp);

printf("%d\n",trie.word);

}return

0;}

利用遞迴刪除資料夾(資料夾中套資料夾)

刪除目錄 bool deldir const ansistring p if p.isempty p.length 4 return false 引數必須大於3,即不能為磁碟根目錄或空白 int len p.length char path p.c str ansistring dir ansist...

拷貝檔案 資料夾 建立資料夾 刪除資料夾操作

qt拷貝檔案 資料夾 建立資料夾 刪除資料夾操作 cpp view plain copy brief 拷貝檔案到目的資料夾 param srcfilename 原始檔全路徑,比如 f tx wwxx.txt f tx des desd param desfilepathname 要copy到的目的路...

資料夾刪不掉?有種資料夾叫 畸形資料夾

右鍵刪除 刪不掉。用命令列 rd命令 刪除,找不到檔案。檔案粉碎機 粉碎無效果。在網上查到這個命令 del f a q 1 rd s q 1 新建文字文件,然後改txt字尾為 cmd 把資料夾拽到這個檔案上面,成功刪除。畸形資料夾 定義 就是在windows中無法或難以通過正常途徑進行建立 檢視 刪...