結果
| 問題 |
No.2227 King Kraken's Attack
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 22:55:46 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 311 ms / 2,000 ms |
| コード長 | 2,844 bytes |
| コンパイル時間 | 141 ms |
| コンパイル使用メモリ | 81,804 KB |
| 実行使用メモリ | 75,916 KB |
| 最終ジャッジ日時 | 2025-04-15 22:57:34 |
| 合計ジャッジ時間 | 4,844 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 42 |
ソースコード
import math
def main():
import sys
H, W, L_A, L_B, K_A, K_B = map(int, sys.stdin.readline().split())
min_sum = float('inf')
# Case 1: cover all rows and columns
A1 = (H + L_A - 1) // L_A
B1 = (W + L_B - 1) // L_B
sum1 = A1 + B1
min_sum = min(min_sum, sum1)
# Iterate A up to a reasonable limit
max_A = (H + L_A - 1) // L_A + 200 # Adding a buffer to cover possible cases
max_A = min(max_A, 10**6)
for A in range(0, max_A + 1):
U_A = max(H - A * L_A, 0)
# Compute B_case1: B >= B0 and provides enough extras
B0 = (W + L_B - 1) // L_B
required_case1 = U_A * W
needed_from_B = max(0, required_case1 - A * K_A)
if K_B == 0:
if needed_from_B > 0:
B_case1 = float('inf')
else:
B_case1 = B0
else:
B_needed = (needed_from_B + K_B - 1) // K_B if needed_from_B > 0 else 0
B_case1 = max(B0, B_needed)
sum_case1 = A + B_case1 if B_case1 != float('inf') else float('inf')
# Compute B_case2: B < B0 and provides enough extras
B_case2 = float('inf')
denominator = K_B + L_B * (H - U_A)
if denominator == 0:
if (H * W - A * K_A) <= 0:
B_candidate = 0
if B_candidate * L_B < W:
sum_case2_candidate = A + B_candidate
B_case2 = B_candidate
else:
needed = H * W - A * K_A
if needed <= 0:
B_candidate = 0
if B_candidate * L_B < W:
B_case2 = B_candidate
else:
B_candidate = (needed + denominator - 1) // denominator
B_max = (W - 1) // L_B
B_candidate = min(B_candidate, B_max)
if B_candidate >= 0:
B = B_candidate
U_B = W - B * L_B
required = U_A * W + U_B * H - U_A * U_B
if A * K_A + B * K_B >= required:
B_case2 = B
else:
B += 1
if B <= B_max:
U_B = W - B * L_B
required = U_A * W + U_B * H - U_A * U_B
if A * K_A + B * K_B >= required:
B_case2 = B
if B_case2 != float('inf'):
sum_case2 = A + B_case2
# Verify if B_case2 * L_B < W
if B_case2 * L_B >= W:
sum_case2 = float('inf')
else:
sum_case2 = float('inf')
current_sum = min(sum_case1, sum_case2)
if current_sum < min_sum:
min_sum = current_sum
print(min_sum)
if __name__ == '__main__':
main()
lam6er