貝茜正在領導奶牛們逃跑.為了聯絡,奶牛們互相傳送秘密資訊.
資訊是二進位制的,共有m(1≤m≤50000)條.反間諜能力很強的約翰已經部分攔截了這些資訊,知道了第i條二進位制資訊的前bi(l《bi≤10000)位.他同時知道,奶牛使用n(1≤n≤50000)條密碼.但是,他僅僅了解第j條密碼的前cj(1≤cj≤10000)位.
對於每條密碼j,他想知道有多少截得的資訊能夠和它匹配.也就是說,有多少資訊和這條密碼有著相同的字首.當然,這個字首長度必須等於密碼和那條首席資訊官度的較小者.
在輸入檔案中,位的總數(即∑bi+∑ci)不會超過500000.
輸入輸出格式
輸入格式
第一行兩個整數m,n
接下來m行每行第乙個為bi,後接bi個0或1表示資訊
接下來n行每行第乙個為ci,後接ci個0或1表示密碼
輸出格式
共n行,每行乙個正整數表示對於每個密碼,和其他資訊的公共字首個數
其實很容易想到字典樹,因為要匹配公共字首嘛
容易想到加密碼範圍內的資訊結尾個數和密碼結尾的最大公共字首個數
(有點小坑就是如果資訊和密碼同樣長度,忽略這個資訊的結尾最大公共字首個數)
#include
#include
#include
#define rep(i,a,b) for (i=a;i<=b;i++)
using
namespace
std;
int root=0,cnt,m;
int f[500001][2],s[500001],b[500001];
void inse(int p)
b[r]++;s[r]--;
}int sear(int p,char *a)
return cnt+s[r];
}void init()
}void print()
printf("%d\n",sear(p,a));
}}int main()
秘密訊息 trie樹
傳送門 題意 給出a集合的0 1串,問b中的串 包涵a中的與被a中包涵的個數 把a中的建乙個trie樹,維護結尾的節點,路上經過的節點的cnt 查詢b,就是到b路徑中結尾的節點 包涵a 和經過b結尾的節點 被包涵 include define n 10005 define m 500005 usin...
洛谷2922 秘密訊息(Trie樹)
既然是讀入字串然後與之前的字串進行匹配,那麼肯定是對之前的字串建立trie樹,這點毋庸置疑。那麼就是統計有多個字串作為他的字首出現以及該字串是多少個字串的字首,那麼就與 簿一題類似了。我記錄經過該點的字串數量以及以該點作為結束點的數量,那麼最後答案就是這條路徑上結束點的數量之和 經過最後點的字串數量...
Trie 洛谷P2922 秘密資訊
給定 n n 個已加密元素,m role presentation m m個鑰匙 感性理解一下。問每把鑰匙串與加密串的最長字首tr iet ri e用su m sum 表示中間字元的出現次數,en d end 表示當前串的出現次數 做一遍tri e tri e即可 include include i...