//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的时候貌似对梳理逻辑有帮助,因此简单逻辑程序本身就是对现实的模拟。