已知有兩個字串a
aa,b
bb及一組字串變換的規則(至多6
66個規則):
a 1→
b1
a_1→b_1
a1→b1a2
→b
2a_2→b_2
a2→b2……
…規則的含義為:在a
aa中的子串a
1a_1
a1可以變換為b
1b_1
b1、a
2a_2
a2可以變換為 b2…
b_2…
b2…
。例如:a=abcd b=xyz
變換規則為:
abc → xu, ud → y, y → yz
則此時,a
aa可以經過一系列的變換變為b
bb,其變換的過程為:
"abcd → xud → xy → xyz"
共進行了三次變換,使得a
aa變換為bbb。
輸入格式:
輸入格式如下:
a
ba\ b
aba 1b
1a_1\ b_1
a1b1
a 2b
2a_2\ b_2
a2b2
…
…… …
……第一行是兩個給定的字串a
aa和b
bb。接下來若干行,每行描述一組字串變換的規則。所有字串長度的上限為20
2020
。輸出格式:
若在10
1010
步(包含10
1010
步)以內能將a
aa變換為b
bb,則輸出最少的變換步數;否則輸出no answer!
。
可以用雙向bfs。每次考慮出隊的時候,可以將元素較少的那個佇列先進行擴充套件。**如下:
#include
#include
#include
using
namespace std;
const
int n =6;
int n;
string a[n]
, b[n]
;int res;
// 返回從q的隊頭拓展出一步是否會和和另乙個方向「會師」
bool
extend
(queue
& q, unordered_mapint>
& da, unordered_mapint>
& db, string a[
], string b)
q.push
(ne);}
return
false;}
intbfs
(string a, string b)
elseif(
extend
(qb, db, da, b, a)
)return res;
}return11;
}int
main()
時間複雜度o(v
+e
)o(v+e)
o(v+e)
。
P1032 字串變換 字串
已知有兩個字串 a,b 及一組字串變換的規則 至多6個規則 a1 b1 a2 b2 規則的含義為 在 a 中的子串 a1 可以變換為 b1 a2 可以變換為 b2 例如 a abcd b xyz 變換規則為 abc xu ud y y yz 則此時,a 可以經過一系列的變換變為 b,其變換的過程為 ...
AcWing 841 字串雜湊
題目描述 給定乙個長度為n的字串,再給定m個詢問,每個詢問包含四個整數l1,r1,l2,r2,請你判斷 l1,r1和 l2,r2這兩個區間所包含的字串子串是否完全相同。字串中只包含大小寫英文本母和數字。輸入格式 第一行包含整數n和m,表示字串長度和詢問次數。第二行包含乙個長度為n的字串,字串中只包含...
ACWing 841 字串雜湊
給定乙個長n nn的字串s ss,再給定m mm次詢問,每次詢問含四個整數l1,r1,l 2,r2 l 1,r 1,l 2,r 2 l1 r1 l2 r2 問s ss的兩個區間 l1 r1 l 1,r 1 l1 r 1 和 l2 r2 l 2,r 2 l2 r 2 的子串是否相等。如果相等輸出 ye...