時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 32768k,其他語言65536k
64bit io format: %lld
題目描述
小明來到乙個由n x m個格仔組成的迷宮,有些格仔是陷阱,用'#'表示,小明進入陷阱就會死亡,'.'表示沒有陷阱。小明所在的位置用's'表示,目的地用't'表示。
小明只能向上下左右相鄰的格仔移動,每移動一次花費1秒。
有q個單向傳送陣,每個傳送陣各有乙個入口和乙個出口,入口和出口都在迷宮的格仔裡,當走到或被傳送到乙個有傳送陣入口的格仔時,小明可以選擇是否開啟傳送陣。如果開啟傳送陣,小明就會被傳送到出口對應的格仔裡,這個過程會花費3秒;如果不開啟傳送陣,將不會發生任何事情,小明可以繼續向上下左右四個方向移動。
乙個格仔可能既有多個入口,又有多個出口,小明可以選擇任意乙個入口開啟傳送陣。使用傳送陣是非常危險的,因為有的傳送陣的出口在陷阱裡,如果小明使用這樣的傳送陣,那他就會死亡。也有一些傳送陣的入口在陷阱裡,這樣的傳送陣是沒有用的,因為小明不能活著進入。請告訴小明活著到達目的地的最短時間。
輸入描述:
有多組資料。對於每組資料:
第一行有三個整數n,m,q(2≤ n,m≤300,0≤ q ≤ 1000)。
接下來是乙個n行m列的矩陣,表示迷宮。
最後q行,每行四個整數x1,y1,x2,y2(0≤x1,x2
< n,0≤ y1,y2
< m),表示乙個傳送陣的入口在x1
行y1列,出口在x2
行y2列。
輸出描述:
如果小明能夠活著到達目的地,則輸出最短時間,否則輸出-1。
示例1
輸入
5 5 1
..s..
.....
.###.
.....
..t..
1 2 3 3
5 5 1
..s..
.....
.###.
.....
..t..
3 3 1 2
5 5 1
s.#..
..#..
###..
.....
....t
0 1 0 2
4 4 2
s#.t
.#.#
.#.#
.#.#
0 0 0 3
2 0 2 2
輸出
68
-13題解:這道題用到bfs和優先佇列的知識,用到優先佇列是因為通過傳送門到達某點的步數和不通過傳送門,直接到達那一點的步數大小不能確定。所以要按照所走步數 從小到大在佇列中排序。----優先佇列
注意這題有乙個坑,每次要讓父節點的visit==1,不能每次標記子節點為1,因為有傳送們的情況,用傳送門到達a點,和不用傳送門到達a點都要入隊。這樣雖然有重複入隊的情況,但是保證了答案的正確性。
附ac**:
#include #include#include #include #include #include #define ll long long
using namespace std;
int n, m, p, v[320][320];
char ma[320][320];
struct node
} no, ne, st, en;
vectorch[305][305];
int dx[4] = ;
int dy[4] = ;
int judge(int x, int y)
int bfs()
for (int i = 0; i < ch[no.x][no.y].size(); i++)
}return -1;}
int main()
}for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
int x1, x2, y1, y2;
for (int i = 0; i < p; i++)
printf("%d\n", bfs());
}return 0;
}
2023年湘潭大學程式設計競賽
a 時間統計 某個實驗需要統計時間,記錄了實驗開始和結束的時間,計算實驗用了多少秒。第一行輸入乙個整數n,表示樣例個數。接下來每組樣例兩行,表示開始時間和結束時間,格式為xdayhh mm ss,x是乙個整數表示第幾天,0 x 20000,hh表示小時,mm表示分鐘,ss表示秒,保證時間合法,結束時...
2018 湘潭大學 H統計顏色
題目描述 n個桶按順序排列,我們用1 n給桶標號。有兩種操作 1 l r c 區間 l,r 中的每個桶中都放入乙個顏色為c的球 1 l,r n,l r,0 c 60 2 l r 查詢區間 l,r 的桶中有多少種不同顏色的球 1 l,r n,l r 輸入描述 有多組資料,對於每組資料 第一行有兩個整數...
2018湘潭大學程式設計競賽 B
題意 給你乙個字母矩陣,和測試組數,讓你統計字串的字元累計出現的次數,然後讓你找出需要找的字元,這個字元必須是每行每列裡出現次數最多的。題解 暴力瞎搞。map列舉一下啊。寫的十分暴力,絕對不是最優解。qaq。題好難讀,看了好久才懂樣例。1 include2 include 3 include4 in...