單點時限:2.0 sec題意:s1可以通過m組關係轉化變為s2,輸出yes。。。記憶體限制:512 mb
有兩個只由小寫字母組成的長度為n的字串s1,s2和m組字母對應關係,每一組關係由兩個字母c1和c2組成,代表c1可以直接變成c2,你需要判斷s1是否可以通過這m組關係轉換為s2。
第一行輸入乙個n(1≤n≤100),代表字串的長度。
第二行和第三行輸入兩個字串s1,s2。
第四行輸入乙個m(1≤m≤325),代表有m組關係。
接下來m行,第i行兩個字元ui,vi,代表ui可以直接變為vi。
如果s1可以通過這些m組關係轉化變為s2,輸出」yes」,否則輸出」no」。
input
output6
aabbcc
cdbcad
4a c
c aa d
b c
可以轉換多次,比如a可以轉換為b,而b可以轉換為c,則a可以轉換為c。yes
樣例一:aabbcc->cabbcc->cdbbcc->cdbccc->cdbcac->cdbcaa->cdbcad
ac**:
#include#include#includeusing namespace std;
char a[440],b[440];
int s[440][440]; ///標記
int main()
for(int k=0; kfor(int i=0; ifor(int j=0; jif(s[i][k]==1&&s[k][j]==1) ///經過轉換可以做到變換的也加1
s[i][j]=1;
int flag=1;
for(int i=0; i}
if(flag)printf("yes\n");
else printf("no\n");
return 0;
}
hihocoder 分隔相同字元
思路 列舉,貪心。在 合法 的前提下放置越排在前邊的字母越好。合法 a z 中沒有乙個字母的個數超過當前串剩餘長度的一半 偶數情況下 或長度的一半加1 奇數情況下 實現 1 include 2 include 3 include 4using namespace std 56 strings 7 i...
最大連續相同的字元
有乙個僅包含 a 和 b 兩種字元的字串s,長度為n,每次操作可以把乙個字元做一次轉換 把乙個 a 設定為 b 或者把乙個 b 置成 a 但是操作的次數有上限m,問在有限的運算元範圍內,能夠得到最大連續的相同字元的子串的長度是多少。輸入描述 第一行兩個整數 n m 1 m n 50000 第二行為長...
交換字元使得字串相同
有兩個長度相同的字串s1 和s2,且它們其中只含有字元 x 和 y 你需要通過 交換字元 的方式使這兩個字串相同。每次 交換字元 的時候,你都可以在兩個字串中各選乙個字元進行交換。交換只能發生在兩個不同的字串之間,絕對不能發生在同乙個字串內部。也就是說,我們可以交換s1 i 和s2 j 但不能交換s...