Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача на python, помогите решить

4321456 Ученик (100), на голосовании 2 недели назад
В одной далёкой-далёкой галактике жители построили гигантское пианино. Оно устроено так же, как устроено обычное пианино: октава состоит из 12 полутонов, соответственно для воспроизведения нот одной октавы используется 12 клавиш, некоторые из них черные, некоторые белые. Клавиши внутри октавы идут в таком порядке:

Б-Ч-Б-Ч-Б-Б-Ч-Б-Ч-Б-Ч-Б
где Б - белая клавиша, Ч - чёрная клавиша. Весь клавишный ряд пианино представляет собой подряд идущие целые октавы, первая октава начинается с первой клавиши (см. рисунок — зелёным выделена первая октава). Клавиши пианино пронумерованы подряд, начиная с первой (соответственно клавиши с 1 по 12 - это клавиши первой октавы, с 13 по 24 — клавиши второй и так далее). Основное отличие этого пианино от обычного земного пианино заключается в его гигантских размерах — в нём очень много клавиш, поэтому оно размещается в межзвездном космическом пространстве.


Жители далёкой-далёкой галактики очень любят своё гигантское космическое пианино. Но вот беда: прошёл метеоритный дождь и повредил часть клавишного ряда пианино, начинающуюся с клавиши номер L и заканчивая клавишей номер R (клавиши с номерами L и R тоже повреждены). Теперь жителям нужно отремонтировать пианино, и для этого они хотят понять: сколько им нужно изготовить черных клавиш взамен испорченных? Помогите им это вычислить.

Формат ввода
В единственной строке входных данных записаны через пробел два целых числа: L и R из условия задачи (1 ≤ L ≤ R ≤ 2⋅ 109).

Формат вывода
Требуется вывести единственное число — ответ в задаче.

Пример 1
Ввод
5 15

Вывод
4

Пример 2
Ввод
1 4

Вывод
2
Голосование за лучший ответ
Про Боб Ученик (114) 1 месяц назад
def count_black_keys(x):
if x < 1:
return 0
full_octaves = x // 12
remainder = x % 12
total_black = full_octaves * 5
black_positions = [2, 4, 7, 9, 11]
total_black += sum(1 for pos in black_positions if pos <= remainder)
return total_black

def main():
import sys

L, R = map(int, sys.stdin.read ().split())

result = count_black_keys(R) - count_black_keys(L - 1)

print(result)

if __name__ == "__main__":
main()
Вертолётов 625 Мудрец (15102) 1 месяц назад
Код:
 def count_black_keys(L, R): 
# Паттерн черных и белых клавиш в одной октаве (0 - белая, 1 - черная)
pattern = [0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0]

# Номер первой и последней клавиши в неполной октаве для L и R
start_octave = (L - 1) // 12
end_octave = (R - 1) // 12

# Количество целых октав между L и R
full_octaves = end_octave - start_octave - 1 if end_octave > start_octave else 0

# Считаем черные клавиши в полных октавах
black_keys_in_full_octaves = full_octaves * sum(pattern)

# Считаем черные клавиши в неполной первой октаве
start_key_in_pattern = (L - 1) % 12
end_key_in_pattern = (R - 1) % 12

if start_octave == end_octave:
# Если L и R находятся в одной октаве, считаем черные клавиши между ними
black_keys_in_partial_octave = sum(pattern[start_key_in_pattern:end_key_in_pattern + 1])
else:
# Считаем черные клавиши в первой неполной октаве
black_keys_in_start_octave = sum(pattern[start_key_in_pattern:])

# Считаем черные клавиши в последней неполной октаве
black_keys_in_end_octave = sum(pattern[:end_key_in_pattern + 1])

# Общее количество черных клавиш в неполных октавах
black_keys_in_partial_octave = black_keys_in_start_octave + black_keys_in_end_octave

# Возвращаем общее количество черных клавиш
return black_keys_in_full_octaves + black_keys_in_partial_octave

# Чтение входных данных
L, R = map(int, input().split())

# Вычисление и вывод результата
print(count_black_keys(L, R))
Похожие вопросы