有一堆字串,然後每次有乙個詢問,問乙個有多少個字串是乙個給出的字串的字首。
這道題可以看出用 trie 樹(甚至有點模板),就建樹就普通的建。
至於詢問,其實我們可以按著長度推 trie 數的位置,每次長度都是乙個字首。然後答案加上就可以。
當然,我們在詢問的時候已經不用再重新建樹,遇到沒有這個分支的就可以直接結束了。
#include
#include
using
namespace std;
struct trie trie[
1000001];
int n, m, cn, now, kk, re;
char c[
1000001];
void
build()
now = trie[now]
.son[c[i]];
} trie[now]
.end++;}
intfind()
return re;
}int
main()
for(
int i =
1; i <= m; i++
)return0;
}
ybt高效高階1 5 1 走迷宮
在乙個 n n 的地圖中,一些地方可以走一些不可以走。問你從乙個地方走到另乙個地方的最小步數。就是直接 bfs 搞過去。跑圖,跑到要的點就輸出退出。include include using namespace std int n,a 1001 1001 sx,sy,tx,ty,ans,now,no...
ybt高效高階3 2 2 新的開始
有乙個圖,要你讓所有點所在的連通塊都至少有乙個標記點。兩個點相連有乙個規定的費用,把乙個點標記也有費用。要費用最小,輸出最小費用。這道題看到判斷連通,我們就想到並查集。然後最小,就想到最小生成樹。但是它不一定只選乙個點標記,而且如果標記了不止乙個點,整個圖就可以不是整個連通的。那怎麼辦呢?那我們想想...
ybt高效高階3 4 4 恆星的亮度
有一些恆星,每個恆星有亮度。給出一些恆星亮度的相對關係,詢問這些恆星亮度總和至少有多大。恆星最暗的亮度是 1 數值越大越亮。關係有兩個亮度相等,乙個比另乙個亮或暗,乙個不比另乙個亮或暗。首先,有乙個小坑,就是不大於其實是小於等於,不小於是大於等於,不要搞反了。那我們會想到如果 a 亮度小於 b 那 ...