hdoj2120 A計畫 (廣搜)

2021-07-11 21:39:48 字數 1761 閱讀 2668

problem description

可憐的公主在一次次被魔王擄走一次次被騎士們救回來之後,而今,不幸的她再一次面臨生命的考驗。魔王已經發出訊息說將在t時刻吃掉公主,因為他聽信謠言說吃公主的肉也能長生不老。年邁的國王正是心急如焚,告招天下勇士來拯救公主。不過公主早已習以為常,她深信智勇的騎士lj肯定能將她救出。

現據密探所報,公主被關在乙個兩層的迷宮裡,迷宮的入口是s(0,0,0),公主的位置用p表示,時空傳輸機用#表示,牆用*表示,平地用.表示。騎士們一進入時空傳輸機就會被轉到另一層的相對位置,但如果被轉到的位置是牆的話,那騎士們就會被撞死。騎士們在一層中只能前後左右移動,每移動一格花1時刻。層間的移動只能通過時空傳輸機,且不需要任何時間。

input

輸入的第一行c表示共有c個測試資料,每個測試資料的前一行有三個整數n,m,t。 n,m迷宮的大小n*m(1 <= n,m <=10)。t如上所意。接下去的前n*m表示迷宮的第一層的布置情況,後n*m表示迷宮第二層的布置情況。

output

如果騎士們能夠在t時刻能找到公主就輸出「yes」,否則輸出「no」。

sample input

1

5 5 14

s*#*.

.#…

…..

**.

…#...*.p

*..

…*.

*.#..

sample output

yes題目意思是:

求是否可以在規定時間內從起點』 s 『在t時間內能夠到達』 p』;

當遇到字元為『#』時,騎士可以在乙個兩層的空間裡可以來回轉換。

方法:廣搜。

但需要做一些特殊處理:即當上層(下層)為』#『時,下層(上層)對應位置為』『,這時把上層(下層)設為 』 『;

或者兩層對應都為』#『,把它們都設為』*『。

這樣就可以把騎士死的情況和在兩個空間裡死迴圈排除,畢竟公主不想看到騎士這樣啊~~~

**:

#include

#include

#include

#include

#include

using

namespace

std;

int xx,yy,zz;

int dx[4]=;

int dy[4]=;

int n,m;

int ttime;

char s[2][20][20];

int vis[2][20][20];

struct node

;void bfs()

vis[nz][nx][ny]=1;

if(s[nz][nx][ny]=='p')

rear.x=nx;

rear.y=ny;

rear.z=nz;

rear.s=front.s+1;

q.push(rear);}}

}printf("no\n");

}int main()}}

}for(int i=0;ifor(int j=0;jif(s[0][i][j]=='#'&&s[1][i][j]=='*')

s[1][i][j]='#';

if(s[0][i][j]=='*'&&s[1][i][j]=='#')

s[0][i][j]='#';

if(s[0][i][j]=='#'&&s[1][i][j]=='#')}}

bfs();

}}

P2120 倉庫建設

又是斜優,這裡是直通車 n 個工廠,每個工廠有三個屬性 座標 x 物品數 p 建設花費 c 可以選若干工廠建倉庫,第 i 個工廠的物品只能運往座標大於等於它的位置倉庫,單個物品移動單位長度花費 1 求儲存所有貨物的最小花費 1 leq n leq 10 6,0 leq x,p,c leq 2 ans...

bzoj2120 數顏色 分塊

據說暴力可過2200ms。然而我寫分塊也才1200ms。然而很多人寫分塊跑不過暴力。參考了將狼踩盡 的思路。假設分為m塊 注意不是每塊m個 用sum x y z 表示在塊x y中顏色z 經過離散化以後 的個數,val x y 表示在x y塊中不同顏色的個數。這樣應該就比較容易明白了。修改 看u會影響...

BZOJ 2120 數顏色 分塊

time limit 6 sec memory limit 259 mb submit 6031 solved 2392 submit status discuss 墨墨購買了一套n支彩色畫筆 其中有些顏色可能相同 擺成一排,你需要回答墨墨的提問。墨墨會像你發布如下指令 1 q l r代表詢問你從第...