P1095 守望者的逃離

2021-09-07 14:26:51 字數 1669 閱讀 7203

惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在與尤迪安的交鋒中遭遇了圍殺,被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為17m/s,以這樣的速度是無法逃離荒島的。慶幸的是守望者擁有閃爍法術,可在1s內移動60m,不過每次使用閃爍法術都會消耗魔法值10點。守望者的魔法值恢復的速度為4點/s,只有處在原地休息狀態時才能恢復。

現在已知守望者的魔法初值m,他所在的初始位置與島的出口之間的距離s,島沉沒的時間t。你的任務是寫乙個程式幫助守望者計算如何在最短的時間內逃離荒島,若不能逃出,則輸出守望者在剩下的時間內能走的最遠距離。注意:守望者跑步、閃爍或休息活動均以秒(s)為單位,且每次活動的持續時間為整數秒。距離的單位為公尺(m)。

輸入格式:

輸入檔案escape.in僅一行,包括空格隔開的三個非負整數m, s, t。

輸出格式:

輸出檔案escape.out包含兩行:

第1行為字串「yes」或「no」(區分大小寫),即守望者是否能逃離荒島。

第2行包含乙個整數。第一行為「yes」(區分大小寫)時表示守望者逃離荒島的最短時間;第一行為「no」(區分大小寫)時表示守望者能走的最遠距離。

輸入樣例#1:

【輸入樣例1】

39 200 4

【輸入樣例2】

36 255 10

輸出樣例#1:

【輸出樣例1】

no197

【輸出樣例2】

yes6

30%的資料滿足:1 <= t <= 10, 1 <= s <= 100

50%的資料滿足:1 <= t <= 1000, 1 <= s <= 10000

100%的資料滿足:1 <= t <= 300000, 0 <= m <= 1000, 1 <= s <= 10^8.

奔跑速度為每秒鐘17公尺 

10點魔法閃現60公尺 

5秒恢復20點魔法 閃現120公尺 ,就是只用魔法七秒120公尺 

每秒平均17.14公尺。 

用搜尋的話,會產生很多重複的運算。 

比如先閃現,和先奔跑,還有先奔跑和先閃現是一樣的,但是搜尋是搜所有情況,這樣對於深度足夠大的時候,重複的次數就會變得非常的多。 

正解:所以我們只需要乙個簡單的迴圈,就可以把搜尋模擬出來而且不會出現重複情況。 

我們優先乙個人只用魔法,然後另外乙個人只奔跑。 

對於每秒鐘留下移動距離最大的人。

因為先閃現和先奔跑時一樣的。

因為移動速度是每秒17公尺 閃爍平均速度是每秒17.14公尺。 

優先閃爍 ,所以乙個人只閃爍並不會影響總體結果的最優性。

1 #include 2 #include 3

4using

namespace

std;56

intm,s,t;

7int

now_s,now_time;

8int

nows,tim;910

intmain()

1121

if(now_st) cout<<"no"

22else cout<<"

yes"

23return0;

24 }

P1095 守望者的逃離

惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在與尤迪安的交鋒中遭遇了圍殺,被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為17m s,以這樣的速度是無法逃離荒島的。慶幸的是守望...

P1095 守望者的逃離

題目描述 惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在與尤迪安的交鋒中遭遇了圍殺,被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為17m s,以這樣的速度是無法逃離荒島的。慶...

P1095 守望者的逃離

p1095 題目描述 惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在與尤迪安的交鋒中遭遇了圍殺,被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為17m s17m s,以這樣的速...