51Nod 1732 51nod婚姻介紹所

2021-08-09 16:14:37 字數 1604 閱讀 1498

1732 51nod婚姻介紹所

基準時間限制:1 秒 空間限制:131072 kb 分值: 40 

難度:4級演算法題

51nod除了在做oj之外,還開展了很多副業。婚姻介紹所就是其中之一。

對於乙個客戶,我們可以使用乙個字串來描述該客戶的特質。

假設現在我們有兩個客戶a和b。

a的特質字串為:abcdefg

b的特質字串為:abcxyz

則a和b的匹配度f(a, b)為a和b的最長公共字首的長度,即len('abc') = 3

由於最近51nod經費緊張,所以夾克大老爺設計了一種壓縮演算法以節約記憶體。

所有使用者的特質字串都被儲存在了乙個長為n的字串s中。(n <= 1000)使用者的特質使用乙個整數p表示,表示該使用者的特質字串為s[p...n - 1]。

現給定字串s,與q次查詢(ai, bi分別為合法的使用者特質整數)。請輸出q次查詢分別對應的客戶匹配度。

現給定字串長度n,與字串s。接下來是整數q,代表接下來有q次查詢。

下面q行有兩個整數ai, bi。代表查詢特質為ai與bi的使用者的匹配度。

1 <= n <= 1000

1 <= q <= 10^6

輸入資料全部合法。

output

每一行輸出乙個使用者匹配度整數。
input示例

12

loveornolove

53 7

0 09 1

3 19 5

output示例

0123

00

wizmann

(題目提供者)

/*最初的想法:詢問離線

*trie樹上乙個乙個掛新增字串,最後求lca

*感覺可做的樣子,但是可能會被卡常數

*正解:把字串翻過來,求最長公共字尾,詳見**

*/#include

#define maxn 1005

int dp[maxn][maxn];

int main(int argc,char *argv)

scanf("%d",&m);

while(m--)

printf("%d\n",dp[u+1][v+1]);

}return 0;}/*

花了我60點頭盾的ac** 不明白我的為什麼為t兩個點

#include

using namespace std;

const int maxn = 1005;

char str[maxn];

int dp[maxn][maxn];

int n;

int main()

else}}

int q;

scanf("%d", &q);

while(q--)

printf("%d\n", dp[a][b]);

}return 0;

}*/

51nod 1732 51nod婚姻介紹所

51nod除了在做oj之外,還開展了很多副業。婚姻介紹所就是其中之一。對於乙個客戶,我們可以使用乙個字串來描述該客戶的特質。假設現在我們有兩個客戶a和b。a的特質字串為 abcdefg b的特質字串為 abcxyz 則a和b的匹配度f a,b 為a和b的最長公共字首的長度,即len abc 3 由於...

51nod 1732 51nod婚姻介紹所

1732 51nod婚姻介紹所 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 51nod除了在做oj之外,還開展了很多副業。婚姻介紹所就是其中之一。對於乙個客戶,我們可以使用乙個字串來描述該客戶的特質。假設現在我們有兩個客戶a和b。a的特質字串為 abcdefg...

1732 51nod婚姻介紹所 字尾陣列

51nod除了在做oj之外,還開展了很多副業。婚姻介紹所就是其中之一。對於乙個客戶,我們可以使用乙個字串來描述該客戶的特質。假設現在我們有兩個客戶a和b。a的特質字串為 abcdefg b的特質字串為 abcxyz 則a和b的匹配度f a,b 為a和b的最長公共字首的長度,即len abc 3 由於...