恶魔猎手尤迪安野心勃勃,她背叛了暗夜精灵,率领深藏在海底的 [哔——] 族企图叛变。
守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。
守望者的跑步速度为 17m/s
恶魔猎手尤迪安野心勃勃,她背叛了暗夜精灵,率领深藏在海底的 [哔——] 族企图叛变。
守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。
守望者的跑步速度为 17m/s
,只有处在原地休息状态时才能恢复。
现在一直守望者的魔法初值 M,他所在的初始位置与岛的出口之间的距离 S,岛沉没的时间 T。
你的任务是写一个程序帮助守望者计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望者在剩下的时间内能走的最远距离。
注意:守望者跑步、闪烁或休息活动均以秒为单位,且每次活动的持续时间为正数秒。距离单位为米。
仅一行,包括空格隔开的三个非负整数 M,S,T
包含两行:
第一行为字符串 Yes 或 No(区分大小写),即守望者是否能逃离荒岛。
第二行包含一个整数。第一行为 Yes(区分大小写)时表示守望者逃离荒岛的最短时间;第一行为 No(区分大小写)时表示守望者能走的最远距离。
39 200 4
No
197
30%
50%
的数据满足: 1≤T≤103,1≤S≤104100%
的数据满足:1≤T≤3×105,0≤M≤103,1≤S≤108
耗时0s的题解:
#include
using namespace std;
int m,t,d,T,D;
int main()
{
cin>>m>>d>>t;
T=t;
while(m>=10&&t>0&&d>D)
{
if (d-D>17)
D+=60,t--,m-=10;
else cout<<"Yes"<0&&d-D>0)
{
if((m==0||m==1)&&t>=7&&d-D>102)
{
t-=7;
D+=120;
}
else if((m>=2&&m<=5)&&t>=3&&d-D>34)
{
m-=2;t-=3;D+=60;
}
else if(m>=6&&t>=2&&d-D>17)
{
m-=6;t-=2;D+=60;
}
else {
D+=17;t--;
}
}
if(d<=D) cout<<"Yes"<
耗时3s的贪心+模拟题解:
#include
#include
using namespace std;
#define MAXN 300010
int main()
{
int m,s,t,i;
int f[MAXN];
cin>>m>>s>>t;
f[0]=0;
for(int i=1;i<=t;i++)
{
if(m>9)
{
f[i]=f[i-1]+60;
m=m-10;
}
else
{
f[i]=f[i-1];
m+=4;
}
}
for(int i=1;i<=t;i++)
{
if(f[i]=s)
{
cout<<"Yes"<