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

Код по информатике

Алиса Чудесная Ученик (90), открыт 2 недели назад
Петя живет на проспекте, который является координатной прямой. Дом Пети находится в точке х, а его школа в точке у. Поскольку Петя живет на севере, то когда он идет в школу из дома, на улице еще темно. Зима длинная, солнца мало, поэтому в каждой точке проспекта, координата которой нацело делится на k, стоит фонарь. Например, если k = 3, то фонари есть в точках -6, -3, 0, 3, 6 и так далее в обе стороны.
Каждый фонарь светит злево и вправо на l. Например, если фонарь стоит в точке 2, и 1 = 4, то фонарь освещает участок прямой от —2 до 6.
Петя не любит ходить по темным участкам проспекта. Он хочет разработать план установки дополнительных фонарей (с таким же параметром l), чтобы путь от дома до школы был полностью освещен. Помогите Пете и определите минимальное число фонарей, которое нужно добавить, чтобы путь от дома до школы был полностью освещен.
Путь от дома до школы называется освещенным, если каждая его точка освещена хотя бы одним фонарем.
2 ответа
Ilya.serebryakov.13 serebryakov Ученик (175) 2 недели назад
c или с++
Алиса ЧудеснаяУченик (90) 2 недели назад
любой язык
Ilya.serebryakov.13 serebryakovУченик (175) 2 недели назад
python норм?
Ilya.serebryakov.13 serebryakovУченик (175) 2 недели назад
так что в итоге надо делать
Ilya.serebryakov.13 serebryakovУченик (175) 2 недели назад
сделать*
Алиса Чудесная Ученик (90) Ilya.serebryakov.13 serebryakov, python тоже можно, нужно написать код к этому заданию который я указала в вопросе:(
Sergio 2.1 Оракул (67269) 2 недели назад
 import math 

x, y, k, l = map(int, input().split())
if x > y:
x, y = y, x

s = math.ceil((x - l) / k) * k
e = math.floor((y + l) / k) * k

a = []
pos = s
while pos <= e:
a.append([pos - l, pos + l])
pos += k

a.sort()
m = []
for i in a:
if not m or m[-1][1] < i[0]:
m.append(i)
else:
m[-1][1] = max(m[-1][1], i[1])

u = []
p = x
for i in m:
s = max(i[0], x)
e = min(i[1], y)
if p < s:
u.append([p, s])
p = max(p, e)
if p < y:
u.append([p, y])

r = 0
for s, e in u:
r += math.ceil((e - s) / (2 * l))
print(r)
Алиса ЧудеснаяУченик (90) 2 недели назад
спасибо, но почему то пишет что неполное решение
Sergio 2.1 Оракул (67269) Алиса Чудесная, попробуйте использовать этот код ↑
Похожие вопросы