2019百度之星初賽第二場 度度熊與排列

2021-09-26 07:04:05 字數 1825 閱讀 9820

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然後利用並查集判斷分出多少種類。...