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
1sample output5 5 14
s*#*.
.#…
…..
**.
…#...*.p
*..
…*.
*.#..
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代表詢問你從第...