На вход программе дается целое число n — количество запланированных звонков (1 ≤ n ≤ 2·105). На следующей строке вводятся через пробел n целых чисел Pi, обозначающие прибыли от звонков (0 ≤ Pi ≤ 1 000). Затем вводятся n+1 целых чисел Aj, обозначающие, сколько звонков можно будет провести после подзарядки (0 ≤ Aj ≤ 106).
Выходные данные
Выведите два числа, первое — это максимальная выгода, которую может получить бизнесмен, второе — количество пропущенных первых звонков, при котором она получается (0, если выгоднее всего не заряжать телефон вовсе).
Примеры тестов
входные данные
5
1 2 0 4 1
2 0 8 3 5 6
выходные данные
5 3
Примечание
Рассмотрим пример из условия: n = 5, P1 = 1, P2 = 2, P3 = 0, P4 = 4, P5 = 1, A0 = 2, A1 = 0, A2 = 8, A3 = 3, A4 = 5, A5 = 6.
Если бизнесмен не будет заряжать телефон, то результат будет равен P1 + P2 = 1 + 2 = 3 рубля. Если предприниматель будет заряжать телефон вместо первого звонка, то он не сможет позвонить ни разу, так как A1 = 0. Если вместо первых двух звонков, то результат составит P3 + P4 + P5 = 0 + 4 + 1 = 5 рублей. Если вместо первых трех, то P4 + P5 = 4 + 1 = 5. Если вместо четырёх звонков, то P5 = 1 рубль. Наконец, если бизнесмен будет заряжать телефон вместо всех n = 5 звонков, то он заведомо ничего не получит. Таким образом, два лучших варианта — это заряжать либо вместо 2 первых звонков, либо вместо 3, в обоих случаях получаем 5 рублей прибыли. По условию, из них мы выбираем выбираем вариант с 3 пропущенными звонками.
Объяснение:
class ATM:
def __init__(self):
self.money = 0.0
self.password = '1234'
def add_money(self, _money) -> bool:
if float(_money) > 0.0:
self.money += float(_money)
return True
return False
def pass_check(self) -> bool:
tries = 1
while input('Give me the password:\n> ') != self.password:
if tries > 2:
return False
tries+=1
print(f'#{tries}: Bad password')
return True
def withdraw(self, _money) -> bool:
if not self.pass_check():
self.close_session()
return False
if float(_money) > 0.0 and self.money - float(_money) >= 0.0:
self.money -= float(_money)
return True
return False
def get_balance(self) -> float:
return self.money
def close_session(self) -> None:
raise SystemExit(0)
# Пример использования 1
_atm = ATM()
_atm.add_money(1700)
print('Your balance is ' + str(_atm.get_balance()))
_atm.withdraw(1600)
print('Your balance is ' + str(_atm.get_balance()))
# Пример использования 2
_atm = ATM()
if _atm.add_money(1600):
print('Money successfully added!')
else:
print('Error while money adding.')
print('Your balance is ' + str(_atm.get_balance()))
if _atm.withdraw(1700):
print('Successfully withdrawn!')
else:
print('Error while money withdrawing.')
#include <cmath>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
if (fabs(n)>fabs(m)) n-=100;
cout << n << " " << m << endl;
system("pause");
}
Пример:
75 -40
-25 -40