OpenJ Bailian 4116 拯救公主

2021-08-22 09:55:24 字數 2174 閱讀 2246

公主被惡人抓走,被關押在牢房的某個地方。牢房用n*m (n, m <= 200)的矩陣來表示。矩陣中的每項可以代表道路(@)、牆壁(#)、和守衛(x)。 

英勇的騎士(r)決定孤身一人去拯救公主(a)。我們假設拯救成功的表示是「騎士到達了公主所在的位置」。由於在通往公主所在位置的道路中可能遇到守衛,騎士一旦遇到守衛,必須殺死守衛才能繼續前進。 

現假設騎士可以向上、下、左、右四個方向移動,每移動乙個位置需要1個單位時間,殺死乙個守衛需要花費額外的1個單位時間。同時假設騎士足夠強壯,有能力殺死所有的守衛。

給定牢房矩陣,公主、騎士和守衛在矩陣中的位置,請你計算拯救行動成功需要花費最短時間。

input

第一行為乙個整數s,表示輸入的資料的組數(多組輸入) 

隨後有s組資料,每組資料按如下格式輸入 

1、兩個整數代表n和m, (n, m <= 200). 

2、隨後n行,每行有m個字元。"@"代表道路,"a"代表公主,"r"代表騎士,"x"代表守衛, "#"代表牆壁。

output

如果拯救行動成功,輸出乙個整數,表示行動的最短時間。 

如果不可能成功,輸出"impossible"

sample input

2

7 8#@#####@

#@a#@@r@

#@@#x@@@

@@#@@#@#

#@@@##@@

@#@@@@@@

@@@@@@@@

13 40

@x@@##x@#x@x#***x##@#x@x@@#x#@#x#@@x@#@x

xx###x@x#@@##xx@@@#@x@@#x@***@@#x@#x@@x@

#@x#@x#x#@@##@@x#@xx#***@@x##@@@#@x@@x@x

@##x@@@x#xx#@@#***x#@@x@x@#@x@@@x@#@#x@#

@#***xx##@@x##x@***@@#x@x####@@@x#x##@#@

#***#@#x##***x@@#xx@@@x@***#@#***@x#####

#x@***x#@x@@@@##@x#xx#***@#xx#@#####x#@x

xx##@#@x##x##x#@x#@a#xx@##@#@##xx@#@@x@x

x#x#@x@#x#@##@xrx@x#***x@##x##xx#@#x@xx@

#x@@#@###x##x@x#@@#@@x@x@@xx@@@@##@@x@@x

x#xx@x###@***#@#x#@@###@#@##@x#@x@#@@#@@

#@#x@x#x#x###@x@@***####x@x##@x####xx#@x

#x#@x#x######@@#x@#***x#xx@@@#xx#x#####@

sample output

#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const ll maxn=1e7+10;

int dx[4]=;

int dy[4]=;

int s;

int n,m;

int map[210][210];

bool vis[210][210];

char a[210][210];

int gx,gy;

struct node

};priority_queueq;

int main()

),vis[i][j]=true;

else if(a[i][j]=='a')gx=i,gy=j;

}} while(!q.empty());

int dy[4]=;

struct node;

int ans;

void bfs());

ans =inf;

while(!p.empty())

if(a[h.x][h.y]=='x'&&g[h.x][h.y]==1));

g[h.x][h.y]=0;

}else

} bfs();

if(ans==inf)cout<<"impossible"

}

生理週期 OpenJ Bailian 4148

標籤 空格分隔 演算法競賽 生理週期 openj bailian 4148 人生來就有三個生理週期,分別為體力週期 感情週期和智力週期,它們的週期長度分別為23天 28天和33天。每乙個週期中有一天是高峰。在高峰這天,人會在相應的方面表現出色。例如,在智力週期的高峰,人會思維敏捷,注意力容易高度集中...

數制轉換 OpenJ Bailian 2710

求任意兩個不同進製非負整數的轉換 2進製 16進製制 所給整數在long所能表達的範圍之內。不同進製的表示符號為 0,1,9,a,b,f 或者 0,1,9,a,b,f 輸入只有一行,包含三個整數a,n,b。a表示其後的n 是a進製整數,b表示欲將a進製整數n轉換成b進製整數。a,b是十進位制整數,2...

OpenJ Bailian 2810 完美立方

形如a3 b3 c3 d3的等式被稱為完美立方等式。例如123 63 83 103 編寫乙個程式,對任給的正整數n n 100 尋找所有的四元組 a,b,c,d 使得a3 b3 c3 d3,其中a,b,c,d 大於 1,小於等於n,且b c d。輸入乙個正整數n n 100 輸出每行輸出乙個完美立方...