problem description
度熊有乙個機器,這個機器有乙個 1∼m 的排列 p[1..m] 當作引數,若丟進乙個長度為 m 的字串,此機器會將此字串重新排列後再輸出,重新排列的方式為:原本第 iii 個位置的字元會變到第 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且 aiinput
有多組詢問,第一行包含乙個正整數 t 代表有幾組詢問。
每組詢問的第一行包含兩個正整數 n,m,分別代表度熊丟進機器的字串數目以及引數的長度。接下來還有 2×n 行,每行有乙個長度為 m 的字串,當中的第 2×i−1 行的字串代表度熊丟進去機器的第 i 個字串,而第 2×i行的字串代表機器對於第 iii 個字串的輸出結果。
output
對於每乙個詢問,輸出一行,若不存在任何引數滿足度熊的記錄,這行只包含乙個整數 −1。否則這行包含乙個排列,代表此機器所有可能的引數中字典序最小的那個。
sample input
4
1 3abc
bca2 4
aaab
baaa
cdcc
cccd
3 3aaa
aaabbb
bbbccc
ccc1 1
az
sample output
3 1 2
2 4 3 1
1 2 3
-1note
第一組詢問中, p[1]=3,p[2]=1,p[3]=2 是唯一的機器可能的引數。
第二組詢問中, p=[2,4,3,1]和 p=[3,4,2,1] 都是機器可能的引數,不過 [2,4,3,1]的字典序比 [3,4,2,1] 還小,故必須輸出 2,4,3,1。
思路:看到n,m都不太大,感覺可以暴力模擬o(n*m*m)
從小到大列舉引數,如果當前引數滿足第一組,那麼把這個引數代入其他組,如果都符合那就是他了
這個引數不滿足那就繼續找,如果都不滿足那就輸出-1
因為是從小到大列舉的,所以字典序一定是最小的
#include#pragma gcc optimize(3)
#define max(a,b) a>b?a:b
using namespace std;
typedef long long ll;
char s[25][55];
char t[25][55];
int p[55];
bool vis[55];
int n,m;
bool flag;
int main()
memset(vis,0,sizeof(vis));
for(int pos=1;pos<=m;pos++)
}if(flag) }}
if(!flag) break;
} if(!flag) printf("-1\n");
else
} }return 0;
}
2019百度之星第二場初賽 A, B, C
a 度度熊與數字 直接暴力列舉v的因子 找到答案之後對答案排一下序輸出即可 include define ll long long using namespace std const int maxn 1005 int arr 1000 int arrr 1000 int factor int n ...
百度之星 初賽第二場 B題
怎麼說呢,只能說自己還不夠熟練,能力還不夠,細心成都還不夠吧。這樣的二分題目在poj的訓練計畫裡面有類似的題目,自己也是都刷了,可是在調這道題目的時候廢了老大的盡了,比賽結束後聽polla的一句思路 找出最大的t,如果按t分類,可分出1組,按0分類分出n組,二分列舉t然後利用並查集判斷分出多少種類。...
百度之星 初賽第二場 B題
怎麼說呢,只能說自己還不夠熟練,能力還不夠,細心成都還不夠吧。這樣的二分題目在poj的訓練計畫裡面有類似的題目,自己也是都刷了,可是在調這道題目的時候廢了老大的盡了,比賽結束後聽polla的一句思路 找出最大的t,如果按t分類,可分出1組,按0分類分出n組,二分列舉t然後利用並查集判斷分出多少種類。...