651A.Joysticks

本文介绍了一个关于两个游戏控制器充电的问题,旨在寻找使游戏持续时间最长的充电策略。控制器的电量会随着时间减少,若连接充电器则可以增加电量。文章通过算法演示了如何最大化游戏时长。
A. Joysticks
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Friends are going to play console. They have two joysticks and only one charger for them. Initially first joystick is charged at a1 percent and second one is charged at a2 percent. You can connect charger to a joystick only at the beginning of each minute. In one minute joystick either discharges by 2 percent (if not connected to a charger) or charges by 1 percent (if connected to a charger).

Game continues while both joysticks have a positive charge. Hence, if at the beginning of minute some joystick is charged by 1 percent, it has to be connected to a charger, otherwise the game stops. If some joystick completely discharges (its charge turns to 0), the game also stops.

Determine the maximum number of minutes that game can last. It is prohibited to pause the game, i. e. at each moment both joysticks should be enabled. It is allowed for joystick to be charged by more than 100 percent.

Input

The first line of the input contains two positive integers a1 and a2 (1 ≤ a1, a2 ≤ 100), the initial charge level of first and second joystick respectively.

Output

Output the only integer, the maximum number of minutes that the game can last. Game continues until some joystick is discharged.

Examples
input
3 5
output
6
input
4 4
output
5
Note

In the first sample game lasts for 6 minute by using the following algorithm:

  • at the beginning of the first minute connect first joystick to the charger, by the end of this minute first joystick is at 4%, second is at 3%;
  • continue the game without changing charger, by the end of the second minute the first joystick is at 5%, second is at 1%;
  • at the beginning of the third minute connect second joystick to the charger, after this minute the first joystick is at 3%, the second one is at 2%;
  • continue the game without changing charger, by the end of the fourth minute first joystick is at 1%, second one is at 3%;
  • at the beginning of the fifth minute connect first joystick to the charger, after this minute the first joystick is at 2%, the second one is at 1%;
  • at the beginning of the sixth minute connect second joystick to the charger, after this minute the first joystick is at 0%, the second one is at 2%.

After that the first joystick is completely discharged and the game is stopped.


#!/usr/bin/python
# -*-coding:utf-8 -*-
a1,a2=map(int,raw_input().split(' '))
count=0
while(a1>0 and a2>0):
    if(a1<=a2):
        a1=a1+1
        a2=a2-2
    else:
        a1=a1-2
        a2=a2+1
    count=count+1
    if(a1<0 or a2<0):
        count=count-1
        break
print count

# SPDX-FileCopyrightText: 2018 Dan Halbert for Adafruit Industries # # SPDX-License-Identifier: MIT """ `Gamepad` ==================================================== * Author(s): Dan Halbert """ import struct import time from adafruit_hid import find_device class Gamepad: """Emulate a generic gamepad controller with 16 buttons, numbered 1-16, and two joysticks, one controlling ``x` and ``y`` values, and the other controlling ``z`` and ``r_z`` (z rotation or ``Rz``) values. The joystick values could be interpreted differently by the receiving program: those are just the names used here. The joystick values are in the range -127 to 127.""" def __init__(self, devices): """Create a Gamepad object that will send USB gamepad HID reports. Devices can be a list of devices that includes a gamepad device or a gamepad device itself. A device is any object that implements ``send_report()``, ``usage_page`` and ``usage``. """ self._gamepad_device = find_device(devices, usage_page=0x1, usage=0x05) # Reuse this bytearray to send mouse reports. # Typically controllers start numbering buttons at 1 rather than 0. # report[0] buttons 1-8 (LSB is button 1) # report[1] buttons 9-16 # report[2] joystick 0 x: -127 to 127 # report[3] joystick 0 y: -127 to 127 # report[4] joystick 1 x: -127 to 127 # report[5] joystick 1 y: -127 to 127 self._report = bytearray(6) # Remember the last report as well, so we can avoid sending # duplicate reports. self._last_report = bytearray(6) # Store settings separately before putting into report. Saves code # especially for buttons. self._buttons_state = 0 self._joy_x = 0 self._joy_y = 0 self._joy_z = 0 self._joy_r_z = 0 # Send an initial report to test if HID device is ready. # If not, wait a bit and try once more. try: self.reset_all() except OSError: time.sleep(1) self.reset_all() def press_buttons(self, *buttons): """Press and hold the given buttons.""" for button in buttons: self._buttons_state |= 1 << self._validate_button_number(button) - 1 self._send() def release_buttons(self, *buttons): """Release the given buttons.""" for button in buttons: self._buttons_state &= ~(1 << self._validate_button_number(button) - 1) self._send() def release_all_buttons(self): """Release all the buttons.""" self._buttons_state = 0 self._send() def click_buttons(self, *buttons): """Press and release the given buttons.""" self.press_buttons(*buttons) self.release_buttons(*buttons) def move_joysticks(self, x=None, y=None, z=None, r_z=None): """Set and send the given joystick values. The joysticks will remain set with the given values until changed One joystick provides ``x`` and ``y`` values, and the other provides ``z`` and ``r_z`` (z rotation). Any values left as ``None`` will not be changed. All values must be in the range -127 to 127 inclusive. Examples:: # Change x and y values only. gp.move_joysticks(x=100, y=-50) # Reset all joystick values to center position. gp.move_joysticks(0, 0, 0, 0) """ if x is not None: self._joy_x = self._validate_joystick_value(x) if y is not None: self._joy_y = self._validate_joystick_value(y) if z is not None: self._joy_z = self._validate_joystick_value(z) if r_z is not None: self._joy_r_z = self._validate_joystick_value(r_z) self._send() def reset_all(self): """Release all buttons and set joysticks to zero.""" self._buttons_state = 0 self._joy_x = 0 self._joy_y = 0 self._joy_z = 0 self._joy_r_z = 0 self._send(always=True) def _send(self, always=False): """Send a report with all the existing settings. If ``always`` is ``False`` (the default), send only if there have been changes. """ struct.pack_into( "<Hbbbb", self._report, 0, self._buttons_state, self._joy_x, self._joy_y, self._joy_z, self._joy_r_z, ) if always or self._last_report != self._report: self._gamepad_device.send_report(self._report) # Remember what we sent, without allocating new storage. self._last_report[:] = self._report @staticmethod def _validate_button_number(button): if not 1 <= button <= 16: raise ValueError("Button number must in range 1 to 16") return button @staticmethod def _validate_joystick_value(value): if not -127 <= value <= 127: raise ValueError("Joystick value must be in range -127 to 127") return value 使用这个库
最新发布
08-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值