算法1
开始有魔时能闪现就闪现,然后如果剩下的魔大于6点就休息一秒再闪现,如果剩下的魔大于两点就休息两秒闪现,当然这些都是建立在时间足够的前提下,时间不够就跑。
之后,如果剩余时间大于等于7秒且距离大于120m就休息5秒,闪现两次(因为7*14=119),否则跑。
C++ 代码
#include <iostream>
using namespace std;
int main()
{
int m,s,t,i,j,run=0,time=0;
cin>>m>>s>>t;
while(m>10) {
time++;m-=10;run+=60;
if(run>=s) {cout<<"Yes\n"<<time;return 0;}
if(time>=t) {cout<<"No\n"<<run;return 0;}
}
if(m>=6&&s-run>=34&&t-time>=2)
{
time+=2;run+=60;m=m-6;
}
while(m>=2&&s-run>=51&&t-time>=3)
{
time+=3;run+=60;m=m-2;
if(run>=s) {cout<<"Yes\n"<<time;return 0;}
if(time>=t) {cout<<"No\n"<<run;return 0;}
}
while(s-run>120&&t-time>=7)
{
time+=7;run+=120;
if(run>=s) {cout<<"Yes\n"<<time;return 0;}
if(time>=t) {cout<<"No\n"<<run;return 0;}
}
while(time<t)
{
time++;run+=17;
if(run>=s) {cout<<"Yes\n"<<time;return 0;}
}
cout<<"No\n"<<run;
return 0;
}
反例:
6 50 100
输出 Yes 3
正确答案应该输出Yes 2
反例:
0 120 7
输出 No 119
正确答案应该输出Yes 7