【NOIP2007】守望者的逃离

原题:

 

这个马维一看就不会玩,闪现肯定直接抄近道,谁会老老实实按路线闪

一眼看上去一道数学题,但是仔细观察可以发现可用的时间不多,只有3e5

因此可以大力发扬暴力精神,直接枚举闪多少次或者聚多少秒

如果枚举闪多少次,则还需要计算攒够闪这么多次的时间,比较繁琐

枚举聚多少秒相对简单,但是需要注意,一开始的魔量可能很大以至于把时间闪完都用不完,需要特判

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int n,m,o;
 5 int main(){
 6     cin>>n>>m>>o;
 7     int ans1=0,ans2=1000000007;
 8     for(int i=0;i+(n+i*4)/10<=o;++i){
 9         ans1=max(ans1,(n+i*4)/10*60+(o-i-(n+i*4)/10)*17);
10         ans2=min(ans2,(((n+i*4)/10*60<=m ? m-(n+i*4)/10*60 : 0)+16)/17+i+(n+i*4)/10);
11     }
12     if(n/10>o){
13         ans1=max(ans1,o*60);
14         ans2=min(ans2,(m+59)/60);
15     }
16     if(ans2<=o)  printf("Yes
%d
",ans2);
17     else  printf("No
%d
",ans1);
18     return 0;
19 }
View Code
原文地址:https://www.cnblogs.com/cdcq/p/12275565.html