[每日一題]:牛客練習賽61 A:打怪

題目:

考察點:

數學、模擬

侃侃:

實際上是一道水題,可是比較菜的我最後差了一點,總之仍是能力不行,沒有AC,最後依靠模擬實現 AC。
由於這道題的數據量不大,最多 10^6,因此模擬是徹底能夠過的。
不過總算仍是學到了一點知識,當用循環去解決問題時,看是否能夠轉化成一個式子進行解決。
這點很是重要。

模擬代碼:

#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int t;
int h,a,H,A;
 
int main(void) {
    scanf("%d",&t);
    while(t --) {
        int ans = 0;
        scanf("%d%d%d%d",&h,&a,&H,&A);
        if(A <= 0 && a != 0) {
            puts("-1");
            continue;
        }
        if(a <= 0) {
            puts("0");
            continue;
        }
        if(a >= H) {
            printf("%d\n",-1);
            continue;
        }
        if(h <= A && a < H) {
            puts("0");
            continue;
        }
        while(h > 0) {
            int value = H;
            while(value > 0) {
                value -= a;
                if(value <= 0) break;
                h -= A;
                if(h <= 0) break;
            }
            if(h > 0) ans ++;
            else break;
        }
        printf("%d\n",ans);
 
    }

數學式子 代碼:

#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int t;
int h,a,H,A;

int main(void) {
	scanf("%d",&t);
	while(t --) {
		int ans = 0;
		scanf("%d%d%d%d",&h,&a,&H,&A);
		if(A <= 0 && a != 0) {
			puts("-1");
			continue;
		}
		if(a <= 0) {
			puts("0");
			continue;
		}
		if(a >= H) {
			printf("%d\n",-1);
			continue;
		}
		if(h <= A && a < H) {
			puts("0");
			continue;
		}
		int res = H % a;
		if(res == 0) {
			int cnt = H / a;
			int flood = (cnt - 1) * A;
			// 這裏我居然傻傻的去用循環,還沒搞對,至少要留一滴血,否則本身就死了,還如何戰鬥 
			ans = (h - 1) / flood;
		} else {
			int cnt = H / a + 1;
			int flood = (cnt - 1) * A;
			ans = (h - 1) / flood;
		}
		printf("%d\n",ans);
	}
	return 0;
}

用循環能夠這樣寫:

#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int t;
int h,a,H,A;
 
int main(void) {
    scanf("%d",&t);
    while(t --) {
        int ans = 0;
        scanf("%d%d%d%d",&h,&a,&H,&A);
        if(A <= 0 && a != 0) {
            puts("-1");
            continue;
        }
        if(a >= H) {
            puts("-1");
            continue;
        }
        int res = H % a;
        if(res == 0) {
            int cnt = H / a;
            int flood = (cnt - 1) * A;
            while(h > 1) {
                h -= flood;
                if(h <= 0) break;
                ans ++;
            }
        } else {
            int cnt = H / a + 1;
            int flood = (cnt - 1) * A;
            while(h > 1) {
                h -= flood;
                if(h <= 0) break;
                ans ++;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

後記:

學會去勇敢的面對你所畏懼的一切,當你選擇面對時,那時的你必定很棒。
相關文章
相關標籤/搜索