網(wǎng)站開發(fā)的一般步驟2023第二波疫情已經(jīng)到來了嗎
題目背景
惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領(lǐng)深藏在海底的娜迦族企圖叛變。
題目描述
守望者在與尤迪安的交鋒中遭遇了圍殺,被困在一個荒蕪的大島上。
為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。
守望者的跑步速度為?17m/s17m/s,以這樣的速度是無法逃離荒島的。慶幸的是守望者擁有閃爍法術(shù),可在?1s1s?內(nèi)移動?60m60m,不過每次使用閃爍法術(shù)都會消耗魔法值?1010?點。守望者的魔法值恢復(fù)的速度為?44?點每秒,只有處在原地休息狀態(tài)時才能恢復(fù)。
現(xiàn)在已知守望者的魔法初值?MM,他所在的初始位置與島的出口之間的距離?SS,島沉沒的時間?TT。你的任務(wù)是寫一個程序幫助守望者計算如何在最短的時間內(nèi)逃離荒島,若不能逃出,則輸出守望者在剩下的時間內(nèi)能走的最遠(yuǎn)距離。
注意:守望者跑步、閃爍或休息活動均以秒為單位,且每次活動的持續(xù)時間為整數(shù)秒。距離的單位為米。
輸入格式
輸入數(shù)據(jù)共一行三個非負(fù)整數(shù),分別表示?MM,SS,TT。
輸出格式
輸出數(shù)據(jù)共兩行。
第一行一個字符串?\texttt{Yes}Yes?或?\texttt{No}No,即守望者是否能逃離荒島。
第二行包含一個整數(shù)。第一行為?\texttt{Yes}Yes?時表示守望者逃離荒島的最短時間;第一行為?\texttt{No}No?時表示守望者能走的最遠(yuǎn)距離。
輸入數(shù)據(jù) 1
39 200 4
Copy
輸出數(shù)據(jù) 1
No
197
Copy
輸入數(shù)據(jù) 2
36 255 10
Copy
輸出數(shù)據(jù) 2
Yes
6
Copy
數(shù)據(jù)范圍與約定
對于?30\%30%?的數(shù)據(jù),1 \le T \le 101≤T≤10,1 \le S \le 1001≤S≤100;
對于?50\%50%?的數(shù)據(jù),1 \le T \le 10^31≤T≤103,1 \le S \le 10^41≤S≤104;
對于?100\%100%?的數(shù)據(jù),1 \le T \le 3\times 10^51≤T≤3×105,0 \le M \le 10^30≤M≤103,1 \le S \le 10^81≤S≤108。
NOIP 2007 普及組 第三題
代碼:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main(){ios::sync_with_stdio(0);int m,s,t,dp[300050];cin>>m>>s>>t;for(int i=1;i<=t;i++){ //先算出閃爍法術(shù)每秒鐘逃離的距離 if(m>=10){ //如果魔力值超過10則用閃爍法術(shù) dp[i]=dp[i-1]+60; //加上逃離的距離 m-=10; //耗法力值10 }else{ //魔力值不夠 dp[i]=dp[i-1]; //休息 m+=4; //恢復(fù)魔力值 }}for(int i=1;i<=t;i++){ //計算跑步的情況 dp[i]=max(dp[i],dp[i-1]+17); //選擇使用閃爍法術(shù)與跑步的逃離最大值 if(dp[i]>=s){ //如果逃離距離超過了s,則成功并結(jié)束程序 cout<<"Yes"<<endl<<i<<endl;return 0;}}cout<<"No"<<endl<<dp[t]<<endl; //時間到了還沒能逃出則失敗 return 0;
}