time limit per test: 1.5 seconds
time limit all tests: 10.0 seconds
memory limit: 256 megabytes
袋鼠媽媽找不到她的孩子了。她的孩子被怪獸抓走了。
袋鼠媽媽現在在地圖的左上角,她的孩子在地圖第 x
行第 y
列的位置。怪獸想和袋鼠媽媽玩乙個遊戲:他不想讓袋鼠媽媽過快地找到她的孩子。袋鼠媽媽每秒鐘可以向上下左右四個方向跳一格(如果沒有牆阻攔的話),怪獸就要在一些格仔中造牆,從而完成乙個迷宮,使得袋鼠媽媽能夠找到她的孩子,但最快不能小於 k
秒。請設計這樣乙個迷宮。
第一行兩個整數 n,m
(1≤n,m≤
8),表示地圖的總行數和總列數。
第二行三個整數 x,y
,k(1≤
x≤n,
1≤y≤
m,x+
y>1)
。輸出乙個地圖,應正好 n
行 m列。
用.
表示空地,用*
表示牆。袋鼠媽媽所在的位置和孩子所在的位置用.
表示。
資料保證有解。
input
2 61 3 4
output
.*.***......
比賽的時候出題人發布了公告,說這個題目是多組答案,只要給出任意乙個符合條件的答案,都會判為正確。
官方題解:
c. 袋鼠媽媽找孩子
由於資料範圍很小,直接搜尋就可以了。考慮 dfs,每乙個要走的格仔,周圍最多只能有一格(其實就是走過來的那一格)是走過的。全部搜一遍就結束了。
出題人:過的人少得不可思議。
比賽的時候沒有做出來,然後看了官方給的題解之後,有了思路。
思路詳述:
暴力求解,搜尋一條路徑,其從起點到終點的時間大於等於k。當然這個路不是隨便選的,走哪是需要條件判斷的。為了讓袋鼠媽媽沿著我深搜的符合條件的路徑走,
我需要採取一些措施,措施如下,假設當前袋鼠媽媽的位置為(x,y),假設她下一秒往右走,那麼我就要把(x,y)位置的上方,下方,左方都設成牆,這樣的話,
她別無選擇了,只能往右走了,同時保留其他三個方向的原始狀態,因為回溯的時候還要恢復那三個點的狀態。也就是說,搜尋方向有四個,如果朝某個方向走,
則除該方向外的其他方向直接封鎖,一直這樣進行下去,直到找到一條符合條件的路徑。在深搜中定義flag變數,標記是否已經找到一組解,當找到第乙個符合
意義而且也浪費時間。
#include#include#includeusing namespace std;
const int maxn = 10;
int map[maxn][maxn];
int dir[4][2] = ,,,};
///搜尋方向上、右、下、左。
int n,m;
int x,y,k;
bool flag;
///用於標記是否已經找到可行解。
/**以sx,sy為新起點進行搜尋,並且從起點到(sx,sy)
已經走了step步**/
void dfs(int sx,int sy,int step)
printf("\n");
}flag = true;
}return; ///找沒找到解都要返回
}for(int i = 0; i < 4; i++) ///進行四個方向的搜尋
dfs(tx,ty,step+1); ///以(tx,ty)為起點,進行深搜
map[tx][ty] = 0; ///回溯,變為0,代表該點沒有走過
for(int j = 0; j < 4; j++)}}
}int main()
}
EOJ 3260 袋鼠媽媽找孩子 題解
題意 袋鼠媽媽找不到她的孩子了。她的孩子被怪獸抓走了。袋鼠媽媽現在在地圖的左上角,她的孩子在地圖第 x 行第 y 列的位置。怪獸想和袋鼠媽媽玩乙個遊戲 他不想讓袋鼠媽媽過快地找到她的孩子。袋鼠媽媽每秒鐘可以向上下左右四個方向跳一格 如果沒有牆阻攔的話 怪獸就要在一些格仔中造牆,從而完成乙個迷宮,使得...
EOJ 莫干山奇遇
出題人當然是希望出的題目有關oxx,於是想方設法給題目配上一些有關oxx的背景故事,使得它看起來不那麼無趣。但有的時候卻無法引入合適的小姐姐,使得oxx顯得非常可憐。所以出題人刪除了故事,只留下乙個枯燥乏味的數學問題。故事已刪除 給乙個長度為n的序列a1,a2,an,求乙個長度為m的序列b1,b2,...
費馬小定理 BZOJ3260 跳
題目大意 乙個二維平面。在這個平面內,如果當前跳到了 x,y 那下一步可以跳到以下 4個點 x 1,y x 1,y x,y 1 x,y 1 假設到達 x,y 需要耗費的體力用 c x,y 表示。對於 c x,y 有以下幾個性質 1 若x 0或者 y 0,則 c x,y 1。2 若x 0且 y 0,則...