題目:
考察點:
數學、模擬
侃侃:
實際上是一道水題,可是比較菜的我最後差了一點,總之仍是能力不行,沒有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;
}
後記:
學會去勇敢的面對你所畏懼的一切,當你選擇面對時,那時的你必定很棒。