20180610模擬賽T1 脫離地牢

2022-05-13 18:13:56 字數 2382 閱讀 4627

在乙個神秘的國度裡,年輕的王子paris與美麗的公主helen在一起過著幸福的生活。他們都隨身帶有一塊帶磁性的陰陽魔法石,身居地獄的魔王satan早就想著得到這兩塊石頭了,只要把它們溶化,satan就能吸收其精華大增自己的魔力。於是有一天他趁二人不留意,把他們帶到了自己的地牢,分別困在了不同的地方。然後satan念起了咒語,準備煉獄,界時二人都將葬身於這地牢裡。 危險!paris與helen都知道了satan的意圖,他們要怎樣才能打敗魔王,脫離地牢呢?paris想起了父王臨終前給他的備忘本,原來他早已料到了satan的野心,他告訴paris只要把兩塊魔法石合在一起,唸出咒語,它們便會放出無限的光榮,殺死魔王,脫離地牢,而且本子上還附下了地牢的地圖,paris從中了解到了helen的位置所在。於是他決定首先要找到helen,但是他發現這個地牢很奇怪,它會增強二人魔法石所帶的磁力大小,而且會改變磁力的方向。這就是說,每當paris向南走一步,helen有可能會被石頭吸引向北走一步。而這個地獄布滿了岩石與熔漿,paris必須十分小心,不僅他不能走到岩石或熔漿上,而且由於他行走一步,helen的位置也會改變,如果helen碰到岩石上,那麼她將停留在原地,但如果helen移動到了熔漿上,那麼她將死去,paris就找不到她了。 paris仔細分析了地圖,他找出了一條最快的行走方案,最終與helen相聚。他們一起唸出了咒語「·#¥%^…*&@!」,轟隆一聲,地牢塌陷了,他們又重見光明…

input

輸入資料第一行為兩個整數n,m(3<=n,m<=20),表示地牢的大小,n行m列。接下來n行,每行m個字元,描述了cf地牢的地圖,「.」代表通路,「#」代表岩石,「!」代表熔漿,「h」表示helen,「p」表示paris。輸入保證地牢是封閉的,即四周均是岩石或熔漿。接下來一行有四個字元「n」(北),「s」(南),「w」(西),「e」(東)的排列,表示paris分別向nswe四個方向走時helen受磁石磁力影響的移動方向。

output

輸出檔案只有一行,如果paris能找到helen,輸出一整數d,為paris最少需要行走的步數;如果paris在255步之後仍找不到helen,則輸出「impossible」。注意相遇是指paris與helen最終到達同乙個格仔,或者二人在相鄰兩格移動後碰到了一起,而後者的步數算他們移動後的步數。

sample input

5 5

#####

#h..#

#.!.#

#.#p#

#####

wnse

sample output
話說這幾天每次模擬賽怎麼都有一道搜尋……

裸的bfs。然而交上去只有奇怪的80分,發現是沒注意這句話:

注意相遇是指paris與helen最終到達同乙個格仔,或者二人在相鄰兩格移動後碰到了一起,而後者的步數算他們移動後的步數。

就是如果paris從a到b,helen從b到a,那麼也算碰到了一起。

於是這個需要判一下。

感覺沒什麼好講的了,就直接上**吧。

#include #include using namespace std;

const int maxn = 25;

int n, m;

char mmap[maxn][maxn];

bool vis[maxn][maxn][maxn][maxn];//直接記錄狀態

struct sxd//這是機房大佬,請不要在意

;const int diri = ;

const int dirj = ;

int dirhi[5];

int dirhj[5];

int main()

else if(mmap[i][j] == 'p')

}} queueq;

q.push(first);

vis[first.pi][first.pj][first.hi][first.hj] = true;

char tmp[5];

gets(tmp);

for(int i = 0; i < 4; ++i) }

while(!q.empty())

if(mmap[nxt.pi][nxt.pj] != '.' || mmap[nxt.hi][nxt.hj] == '!')

continue;

if(mmap[nxt.hi][nxt.hj] == '#')//注意helen是可以撞牆的。

if(nxt.hi == nxt.pi && nxt.hj == nxt.pj)

if(!vis[nxt.pi][nxt.pj][nxt.hi][nxt.hj])

}} puts("impossible");

fclose(stdin);

fclose(stdout);

return 0;

}

4 21小A模擬賽 T1

description 乙個無限長的01 序列,初始全為0,每次選擇乙個區間 l,r 進行操作,有三種操作 1 l r 將 l,r 中所有元素變成1。2 l r 將 l,r 中所有元素變成0。3 l r 將 l,r 中所有元素異或上1。每次操作後詢問最左邊的0 在哪個位置。input format ...

YCH的模擬賽 T1

括號序列問題,往往就是把左括號看成 1,右括號看成 1,我們只需要保證任意乙個字首大於等於0,且總和為0,就代表是個合法括號序列了。令 f i j 表示當前到第 i 個字元,現在的字首和 j 那麼分三種情況考慮。若第 i 1 個字元是左括號,則能轉移到 f i 1 j 1 若第 i 1 個字元是右括...

11 12 模擬賽T1 加密

有一種不講道理的加密方法是 在字串的任意位置隨機插入字元。相應的,不講道理的解密方法就是從字串中恰好刪去隨機插入的那些字元。給定原文?和加密後的字串?求?有多少子串可以通過解密得到原文?輸入第一行包含乙個字串?第二行包含乙個字串?輸出一行,包含乙個整數,代表可以通過解密得到原文的?的子串的數量。ab...