problem description
小明和他的好朋友小西在玩乙個新的遊戲,由小西給出乙個由小寫字母構成的字串,小明給出另乙個比小西更長的字串,也由小寫字母組成,如果能通過魔法轉換使小明的串和小西的變成同乙個,那麼他們兩個人都會很開心。這裡魔法指的是小明的串可以任意刪掉某個字元,或者把某些字元對照字元變化表變化。如:小西的串是 abba;
小明的串是 addba;
字元變化表 d b (表示d能轉換成b)。
那麼小明可以通過刪掉第乙個d,然後將第二個d轉換成b將串變成abba。
現在請你幫忙判斷:他們能不能通過魔法轉換使兩個人的串變成一樣呢?
input
首先輸入t,表示總共有t組測試資料(t <= 40)。接下來共t組資料,每組資料第一行輸入小西的字串,第二行輸入小明的字串(資料保證字串長度不超過1000,小明的串的長度大於等於小西的,且所有字元均為小寫字母)。接著輸入字母表,先輸入m,表示有m個字元變換方式(m< = 100),接著m行每行輸入兩個小寫字母,表示前乙個可以變為後乙個(但並不代表後乙個能變成前乙個)。
output
對於每組資料,先輸出case數。每組資料佔一行,具體輸出格式參見樣例。
sample input
2abba
addba
1d badd
0
sample output
型別:dp 難度:1.5
題意分析:給定26個字母間的對映關係,有可能一對多或多對一,問給定a,b串,b串長於a串,問b串字母可通過對映轉換,或刪除,是否能變成a串
一開始以為是乙個字母可以多次對映,要對每個字母建立乙個可以轉換的字母集合,即遍歷所有父節點直到沒有父節點。後來發現想複雜了,記錄一次對映轉換即可,即將其上一級的父節點視為等價類,再用最長公共子串lcs演算法計算即可,若結果為a的長度,那麼即為成功。
#include#include#includeusing namespace std;
const int n=1010;
char p[n],q[n];
int n;
int tr[30][30],mp[30][30];
int dp[n][n];
void simp()
; flag[i]=1;
mp[i][i]=1;
for(j=1;j<=tr[i][0];j++)
/*while(top>0)
flag[tmp]=1;
}*/ }}
int main()
printf("case #%d: ",cnt);
} }
西山居決賽
很刺激的比賽,雖然表現很捉雞,但還是很開心。tc cf規則,3小時,其中0.5小時是hack環節 分數分布 1000 1000 1500 2000 2000 01 看了一下發現是道sb的拓撲排序 事實上不是 輕鬆過掉pretest 02 分析錯了最壞情況,以為暴力能過,然後就暴力了。03 一開始就覺...
金山 西山居2011實習生招聘筆試題目
題目巨簡單共6個題目 1 對陣列 字元陣列 字串指標等使用sizeof操作符 在win32平台下 基本就上上面的幾個形式。memset的函式原型是 void cdecl memset void int,size t memcpy和memmove的區別 區別在於 源記憶體區域 和 目標記憶體區域是否有...
西山居 筆試題
1.char sztest 12345 t n 0abcd 0 則 strlen sztest 值為 7 sizeof sztest 值為 14 2.int antest 5 10 int n1 antest 4 antest 10 n2 antest 3 1 antest 1 3 則 n1和n2 ...