怪物初始血量 h,玩家攻擊力 a,怪物每回合回血 b,玩家連續攻擊 k 回合後需休息 1 回合。判斷玩家能否擊殺怪物。
h <= a,第一刀直接秒殺。k 回合怪物回血 k-1 次,若 k*a >= (k-1)*b + h 則在第 k 擊殺死。k*a > (k+1)*b。若成立,隨時間怪物必死。其餘情況玩家無法獲勝。
#includeusing namespace std; int main() { long long h, a, b, k; int cnt = 0; while (scanf("%lld%lld%lld%lld", &h, &a, &b, &k) == 4 && (h||a||b||k)) { printf("Case #%d: ", ++cnt); if (h <= a || k*a >= (k-1)*b + h || k*a > (k+1)*b) puts("YES"); else puts("NO"); } return 0; }
long long 防止 k*a 溢位 (k, a 可達 1e9)。同一題目,邏輯完全相同,僅敘述不同。代碼可通用。