計蒜客 封印之門 簡單Floyd應用

2021-08-22 10:29:47 字數 1216 閱讀 4208

蒜頭君被暗黑軍團包圍在一座島上,所有通往近衛軍團的路都有暗黑軍團把手。幸運的是,小島上有一扇上古之神打造的封印之門,可以通往近衛軍團,傳聞至今沒有人能解除封印。

封印之門上有一串文字,只包含小寫字母,有 kkk 種操作規則,每個規則可以把乙個字元變換成另外乙個字元。經過任意多次操作以後,最後如果能把封印之門上的文字變換成解開封印之門的文字,封印之門將會開啟。

蒜頭君戰鬥力超強,但是不擅計算,請你幫忙蒜頭君計算至少需要操作多少次才能解開封印之門。

輸入第一行乙個字串,長度不大於 1000,只包含小寫字母,表示封印之門上的文字。

輸入第二行乙個字串,只包含小寫字母,保證長度和第乙個字串相等,表示能解開封印之門的文字。

輸入第三行乙個整數 k(0≤k≤676)k(0 \le k \le 676)k(0≤k≤676)。

接下來 kkk 行,每行輸出兩個空格隔開的字元 aaa, bbb,表示一次操作能把字元 aaa 變換成字元 bbb。

如果蒜頭君能開啟封印之門,輸出最少的操作次數。否則輸出一行 −1-1−1。

樣例輸入

abcd

dddd

3a b

b cc d

樣例輸出

6
時間限制:1000ms

思路:簡單的最短路問題,要求最小操作次數,第一反應是貪心,但是可能出現有環的情況,貪也不好貪。因為每乙個字元若不相等都會進行操作,所以可以看做單獨的個體,也就是乙個點,每次操作可以將操作前後的2個字元當作點來處理,邊權便是操作的次數,因為該題的圖很小,只有26個字母,也就是26^2的圖,也不存在負環情況,所以用暴力floyd(最簡單)直接跑一遍即可。

**如下:

#include#include#include#include#include#define per(i,a,b) for(int i=a;i<=b;i++)

#define inf 0x3f3f3f3f

using namespace std;

int main()

} cin>>t;

per(i,1,t)

per(k,0,26)

}} int z=0;

for(i=0;ielse

z+=p[s[i]-'a'][s1[i]-'a'];

} printf("%d\n",z);

return 0;

}

計蒜客 封印之門(floyd)

封印之門 蒜頭君被暗黑軍團包圍在一座島上,所有通往近衛軍團的路都有暗黑軍團把手。幸運的是,小島上有一扇上古之神打造的封印之門,可以通往近衛軍團,傳聞至今沒有人能解除封印。封印之門上有一串文字,只包含小寫字母,有 kk k 種操作規則,每個規則可以把乙個字元變換成另外乙個字元。經過任意多次操作以後,最...

計蒜客題庫加一(簡單)

1,並輸出加一以後的結果。例如 a 2,3,1,1,4 a 2,3 1,1 4 則結果為 2,3,1,1,5 2 3,1 1,5 a 7,8,9 a 7,8 9 則結果為 7,9,0 7 9,0 第一行輸入乙個正整數 n 1 leq n leq 100 n 1 n 100 接下來的一行,輸入用空格分...

計蒜客之簡單斐波那契

也可以用陣列或者佇列解決 遞迴 includeint fibonacci int n int main 迭代 includeint diedai int n return a n int main 斐波那契數列是一種非常有意思的數列,由 00 0 和 11 1 開始,之後的斐波那契係數就由之前的兩數...