- Kate bir büyücüdür. Şimdi sınavı geçmelidir.
Sınav sırasında N kez sihirli odaya girmesi gerekmektedir. Başlangıçta odada X sihirli nesne bulunmaktadır. Her ziyaretinden önce, odadaki sihirli nesne sayısını azaltmak için sihir kullanabilir. Her bir nesne için 1 mana puanı harcar. Her ziyaretten sonra, sihirli nesne sayısı 2 kat artar. Odada L’den fazla sihirli nesne olduğunda içeri giremez. Kate’in sınavı geçmek için minimum kaç mana puana ihtiyacı vardır?
Birkaç test durumu için bu problemi çözmeniz gerekiyor.
Giriş:
Girişin ilk satırında tek bir tamsayı (1<=T <=10**5) bulunur - test durumu sayısı.
Ardından T satırı takip eder. Bu satırların her biri üç tamsayı içerir: Xi, Li, Ni (0<= Xi,Li,Ni,<= 10**18)
Çıktı:
T satırı yazdırın.
Onlardan her biri, i-th test durumunda sınavı geçmek için gereken minimum mana puanı içermelidir.
Örnek Giriş:
2
2 5 3
6 5 0
Örnek Giriş için Çıktı:
1
0
Benim Yazdığım ve en doğru kod: (Ekran görüntüsündekinden farklı bu kod. Yeniden düzenledim)
def calculate_mana_points(X, L, N):
left = 0
right = X
while right - left > 1:
mid = (left + right) // 2
if calculate_cost(X, L, N, mid) < calculate_cost(X, L, N, mid + 1):
right = mid
else:
left = mid + 1
return calculate_cost(X, L, N, left)
def calculate_cost(current_X, L, N, destroyed_items):
if current_X <= L:
return 0
if N == 0 or destroyed_items == 0:
return float('inf')
half_items = current_X // 2
if half_items < L:
return destroyed_items + calculate_cost(half_items, L, N - 1, destroyed_items * 2)
cost1 = destroyed_items + calculate_cost(half_items, L, N - 1, destroyed_items * 2)
cost2 = destroyed_items + calculate_cost(half_items + 1, L, N - 1, destroyed_items * 2)
if cost1 == float('inf') and cost2 == float('inf'):
return float('inf')
elif cost1 == float('inf'):
return cost2
elif cost2 == float('inf'):
return cost1
else:
return min(cost1, cost2)
# Read number of test cases
T = int(input())
test_cases = []
# Read test cases
for _ in range(T):
X, L, N = map(int, input().split())
test_cases.append((X, L, N))
# Solve the problem for each test case
for test_case in test_cases:
X, L, N = test_case
min_mana_points = calculate_mana_points(X, L, N)
print(int(min_mana_points))
Buradan aldığım hata da şu şekilde:
Error Loglar da tek çeşit ve şu şekilde:
“Exception Name: OverflowError
Exception Message: cannot convert float infinity to integer
Exception Line number: 55
53 X, L, N = test_case
54 min_mana_points = calculate_mana_points(X, L, N)
55 print(int(min_mana_points))”
Hiçbir şekilde çözemedim