度熊有乙個機器,這個機器有乙個 1∼m 的排列 p[1…m] 當作引數,若丟進乙個長度為 m 的字串,此機器會將此字串重新排列後再輸出,重新排列的方式為:原本第 i 個位置的字元會變到第 p[i] 個位置。
舉例來說,當 m=3,p[1]=3,p[2]=1,p[3]=2,那麼丟 「abc」 進入這個機器後,機器會輸出"bca";若丟進的是 「ded」,那麼機器會輸出 「edd」。
某天,度熊不小心忘記這個機器的引數了,只記得引數的長度是 m,於是他丟了 n 長度為 m 的字串進去,並記錄下對於每個字串機器的輸出結果,請你根據這些結果,幫度熊找回這個機器的引數。若有多組引數都滿足度熊的記錄,請輸出字典序最小的排列作為引數。若並不存在任何引數滿足度熊的記錄,請輸出 −1。
注:對於兩個相異的排列a: a[1…m] 和 b[1…m],我們稱 a 比 b 小當且僅當 存在乙個 i,滿足對於所有小於 i 的 j 都有 aj=bj 且 ai有多組詢問,第一行包含乙個正整數 t 代表有幾組詢問。
每組詢問的第一行包含兩個正整數 n,m,分別代表度熊丟進機器的字串數目以及引數的長度。接下來還有 2×n 行,每行有乙個長度為 m 的字串,當中的第 2×i−1 行的字串代表度熊丟進去機器的第 i 個字串,而第 2×i 行的字串代表機器對於第 i 個字串的輸出結果。
對於每乙個詢問,輸出一行,若不存在任何引數滿足度熊的記錄,這行只包含乙個整數 −1。否則這行包含乙個排列,代表此機器所有可能的引數中字典序最小的那個。
sample input
41 3
abcbca
2 4aaab
baaa
cdcc
cccd
3 3aaa
aaabbb
bbbccc
ccc1 1az
sample output
3 1 2
2 4 3 1
1 2 3
-1note
第一組詢問中, p[1
]=3,
p[2]
=1,p
[3]=
2p[1]=3,p[2]=1,p[3]=2
p[1]=3
,p[2
]=1,
p[3]
=2是唯一的機器可能的引數。
第二組詢問中, p=[
2,4,
3,1]
p=[2,4,3,1]
p=[2,4
,3,1
] 和 p=[
3,4,
2,1]
p=[3,4,2,1]
p=[3,4
,2,1
] 都是機器可能的引數,不過 [2,
4,3,
1]
[2,4,3,1]
[2,4,3
,1] 的字典序比 [3,
4,2,
1]
[3,4,2,1]
[3,4,2
,1] 還小,故必須輸出 2,4,3,1。
題解:列舉前輸入和輸出的第乙個字串, 所有的匹配方案, 然後去放到其他字串中check一下
#include
using
namespace std;
int t, n, m;
string str1[30]
, str2[30]
;int p[60]
, vis[60]
;int
check()
}}return1;
}int
main()
for(
int i =
0; i < m; i++
)else}}
if(f)
}for
(int i =
0; i < m; i++
)end:
continue;}
return0;
}
hdu 6080 度度熊保護村莊
嘩啦啦村襲擊了喵哈哈村!度度熊為了拯救喵哈哈村,帶著自己的夥伴去救援喵哈哈村去了!度度熊與夥伴們很快的就過來佔據了喵哈哈村的各個軍事要地,牢牢的守住了喵哈哈村。但是度度熊發現,這是一場曠日持久的戰鬥,所以度度熊決定要以逸待勞,儲存盡量多的體力,去迎戰嘩啦啦村的戰士。於是度度熊決定派盡量多的人去休息,...
HDU 6375 度度熊學佇列
danshlem description 度度熊正在學習雙端佇列,他對其翻轉和合併產生了很大的興趣。初始時有 n 個空的雙端佇列 編號為 1 到 n 你要支援度度熊的 q 次操作。1 u w val 在編號為 u 的佇列裡加入乙個權值為 val 的元素。w 0 表示加在最前面,w 1 表示加在最後面...
hdu6376 度度熊剪紙條
度度熊有一張紙條和一把剪刀。紙條上依次寫著 n 個數字,數字只可能是 0 或者 1。度度熊想在紙條上剪 k 刀 每一刀只能剪在數字和數字之間 這樣就形成了 k 1 段。他再把這 k 1 段按一定的順序重新拼起來。不同的剪和接的方案,可能會得到不同的結果。度度熊好奇的是,字首 1 的數量最多能是多少。...