第六屆華為創新杯程式設計大賽-進階1第1輪

jsjliuyun發表於2014-05-07
洞穴逃生
描述:
精靈王子愛好冒險,在一次探險歷程中,他進入了一個神祕的山洞。在洞穴深處,精靈王子不小心觸動了洞穴內暗藏的機關,整個洞穴將很快塌陷,精靈王子必須儘快逃離洞穴。精靈王子的跑步速度為17m/s,以這樣的速度可能是無法逃出洞穴的。慶幸的是精靈王子擁有閃爍法術,可在1s內移動60m,不過每次使用閃爍法術都會消耗魔法值10點。精靈王子的魔法值恢復的速度為4點/s,只有處在原地休息狀態時才能恢復。
現在已知精靈王子的魔法初值M,他所在洞穴中的位置與洞穴出口之間的距離S,距離洞穴塌陷的時間T。你的任務是寫一個程式幫助精靈王子計算如何在最短的時間內逃離洞穴。若能逃出,輸出"Yes",並輸出逃出所用的最短時間;若不能逃出,則輸出"No",同時輸出精靈王子在剩下的時間內能走的最遠距離。注意字母大小寫。注意:精靈王子跑步、閃爍或休息活動均以秒(s)為單位。且每次活動的持續時間為整數秒。距離的單位為米(m)。
注:M、S、T均是大於等於0的整數。由輸入保證取值合法性,考生不用檢查。
提醒:
如果輸入的S為0,則說明本身已經在出口,輸出應為:Yes 0
如果輸入的T為0(且S不為0),則說明已經沒有時間了,輸出應為:No 0

執行時間限制: 無限制
記憶體限制: 無限制
輸入:
輸入格式:
M
S
T
輸出:
輸出格式:
Yes 逃出洞穴所用的最短時間

No 在洞穴塌陷前能逃跑的最遠距離
樣例輸入:
10

50

5
樣例輸出:

Yes 1

直接貼通過程式碼

#include <iostream>
using std::endl;
using std::cin;
using std::cout;
int main()
{
	int M,S,T;
	cin >> M >> S >> T;
	int distance=0;
	int flashdistance=0;
	int i;
	if(S==0)
	{
		cout << "Yes " << 0 << endl;
	}else if(T==0 && S!=0)
	{
		cout << "No " << 0 << endl;
	}else{
		for(i=1;i<=T;++i)
		{
			distance+=17;
			if(M<10)
			{
				M+=4;
			}else{
				flashdistance+=60;
				M-=10;
			}
			if(distance<flashdistance)
				distance = flashdistance;
			if(distance >= S)
				break;
		}
		if(i<=T)
			cout << "Yes " << i << endl;
		else
			cout << "No " << distance << endl;
	}
	return 0;
}

相關文章