题解:P1095 [NOIP2007 普及组] 守望者的逃离

· · 题解

我们可以使用贪心同时维护跑步和休息。先记下使用魔法的地方,然后跑步的位置可以由之前使用魔法的地方继续走,最后取最大值就可以了。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int m,s,t;
int d=0,maxx=-1e18;
signed main(){
    cin>>m>>s>>t;
    for(int i=1;i<=t;i++){
        if(m>=10){
            m-=10;
            d+=60;
        }
        else{
            m+=4;   
        }
        maxx+=17;
        if(d>maxx){
            maxx=d;
        }
        if(maxx>s){
            cout<<"Yes"<<endl;
            cout<<i<<endl;
            return 0; 
        }
    }
    cout<<"No"<<endl;
    cout<<maxx<<endl;
    return 0; 
}