ACWing 190 字串變換

2021-10-22 09:05:01 字數 1681 閱讀 1552

已知有兩個字串a

aa,b

bb及一組字串變換的規則(至多6

66個規則):

a 1→

b1

a_1→b_1

a1​→b1​a2

→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

a1​b1​

a 2b

2a_2\ b_2

a2​b2​

…… …

……第一行是兩個給定的字串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...