金山西山居2013程式挑戰賽初賽 第一題

2021-06-14 09:27:36 字數 1413 閱讀 1525

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

2

abba

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 ...