//364K 0MS G++
#include <cstdio>
#include <cstring>
using namespace std;
double fatigueFactor;
double slideDistance;
double climbDistance;
double wellHeight;
void solve() {
int day = 1;
double height = 0;
double curClimbDistance = climbDistance;
while(1) {
// printf("%lf\n", curClimbDistance);
height += curClimbDistance;
if (height > wellHeight) {
printf("success on day %d\n", day);
return;
}
height -= slideDistance;
if (height < 0) {
height = 0;
printf("failure on day %d\n", day);
return;
}
// if (height == 0) {
// }
curClimbDistance -= (climbDistance*fatigueFactor)/100;
if (curClimbDistance < 0) {
curClimbDistance = 0;
}
day++;
}
}
int main() {
while(scanf("%lf %lf %lf %lf", &wellHeight, &climbDistance,
&slideDistance, &fatigueFactor) != EOF) {
if (!wellHeight) {
return 0;
}
solve();
}
}
模拟水题,不过题目描述的不够清晰,
比如题目说如果蜗牛slid到了井底,那么就算failure,
但是在真实判断时,是蜗牛当前高度只有小于slid的长度时,才算失败,
所以 1 1 1 1这个case是第2天失败,第一天爬了1feet,然后晚上下滑1feet,理论上讲现在应该是滑到井底了,但是这种情况不算失败,
只有在第二天,爬了0.99feet,下滑1feet,高度成了负数,才算失败,
发现自己对这种题需要多练习,模拟的思路在写code的时候貌似对梳理逻辑有帮助,因此简单逻辑程序本身就是对现实的模拟。