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

Помогите код написать питон олимпиада

сатанек кинни Ученик (44), открыт 1 месяц назад
Фонари

Ограничение по времени: 1 секунда Ограничение по памяти: 256 мегабайт

Вдоль прямой улицы на равном расстоянии располагаются № домов. Будем считать расстояние между домами за единицу длины.

Около каждого дома можно поставить один фонарь. Всего имеется

А фонарей, которые могут освещать дома на расстоянии Х (включительно), и В фонарей, которые могут освещать дома на расстоянии У (включительно). В частности, при Х 0 или У 0 такой фонарь освещает только тот дом, у которого он установлен.

Вам необходимо расставить минимальное число фонарей так, чтобы все дома были освещены. Один дом может быть освещён несколькими фонарями. Освещать участки улицы между домами необязательно.
Формат входных данных

Первая строка входных данных содержит целое число № (1 ≤ N ≤ 105). Следующие четыре строки содержат целые неотрицательные числа А, Х, В и У соответственно, которые не превосходят 105.

Формат выходных данных

Программа должна вывести столько строк, сколько фонарей необходимо установить. Каждая строка должна содержать два целых числа через пробел - координату фонаря и расстояние, которое он освещает (то есть одно из чисел Х или У).

Координаты представляют из себя целые числа от 1 до №, рядом с каждым домом можно поставить только один фонарь.

При наличии нескольких правильных ответов можно вывести любой из них. Если ответа не существует, программа дллжна вывести одно число -1.
Система оценки

Решения, правильно работающие при А 0 или В = 0, будут оцениваться в 30 баллов.

Решения, правильно работающие при А ≠ 0, В ≠ 0, n ≤ 1000, будут оцениваться в 40 баллов.

Замечание

В ответе к первому примеру фонарь у дома 2 освещает также дома 1 и 3, фонарь у дома 5 также дома 3, 4, 6 и 7, а фонарь у дома 9 также дома 8 и 10. В результате все дома освещены.

Во втором примере фонарей недостаточно.
Ввод
10
3
1
1
2

10
1
1
1
2
Вывод
2 1
5 2
9 1

-1
11 ответов
Дмитрий Иванов Ученик (103) 1 месяц назад
пж помогите мы тут тоже страдаем плиз програмисты помогите
сатанек кинниУченик (44) 1 месяц назад
рил
иван сабуров Знаток (305) 1 месяц назад
n = int(input())
A = int(input())
X = int(input())n
B = int(input())
Y = int(input())

lenA = 2 * X + 1
lenB = 2 * Y + 1
r1 = X
r2 = Y
C1 = A
C2 = B

if lenA >= lenB:
r_long, c_long, len_long, type_long, R_long = r1, C1, lenA, 'A', X
r_short, c_short, len_short, type_short, R_short = r2, C2, lenB, 'B', Y
else:
r_long, c_long, len_long, type_long, R_long = r2, C2, lenB, 'B', Y
r_short, c_short, len_short, type_short, R_short = r1, C1, lenA, 'A', X

current_position = 1
result = []

while current_position <= n:
placed = False
for r, c, R in [(r_long, c_long, R_long), (r_short, c_short, R_short)]:
if c <= 0:
continue
s = min(n, current_position + r)
if s - r > current_position:
s = current_position + r - (s - r - current_position)
if s < current_position or s < 1:
continue
if s > n:
s = n
if s - r > current_position:
continue
c -= 1
result.append((s, R))
current_position = s + r + 1
if (r, c, R) == (r_long, c_long, R_long):
c_long = c
else:
c_short = c
placed = True
break
if not placed:
print(-1)
exit()

for s, R in result:
print(f"{s} {R}")
сатанек кинниУченик (44) 1 месяц назад
0 баллов
сатанек кинни, так ты n убери
Максим КозыревУченик (143) 1 месяц назад
бездарб
Максим Козырев, не все такие умные как ты походу
Антон АнпилоговУченик (101) 1 месяц назад
не понимаю, по кд получается 50/100, n убрал, но что то все же не правильно
Антон Анпилогов, ты просто даун
Maxim VedeninУченик (110) 1 месяц назад
ПОМЕНЯЙ ПЕРЕМЕННЫЕ ИДИОТ
Maxim Vedenin, скажи пж а кроме n где еще нужно поменять что
Круглов ГеоргийУченик (136) 1 месяц назад
Есть ответы на любые Олимпиады по информатике, программированию и т.д.Пишите в тг : @Georgi_36
Даня Эндорфинов Ученик (114) 1 месяц назад
код на 90/100,кто найдёт ошибку и сделает на 100 из 100,отписывайте сюда

 def solve(): 
N = int(input()) # количество домов
A = int(input()) # количество фонарей с радиусом X
X = int(input()) # радиус X
B = int(input()) # количество фонарей с радиусом Y
Y = int(input()) # радиус Y

# Edge case: If there is only one house
if N == 1:
if A > 0:
print(1, X)
elif B > 0:
print(1, Y)
else:
print(-1)
return

covered = [False] * (N + 1) # To mark whether a house is covered or not
lamps = []
i = 1 # Start at the first house

# Loop over the street and place lamps
while i <= N:
if B > 0 and (i + Y <= N or i + Y > N and i <= N): # Place lamp with radius Y
position = min(i + Y, N)
lamps.append((position, Y))
for j in range(max(1, position - Y), min(N + 1, position + Y + 1)):
covered[j] = True
B -= 1
elif A > 0 and (i + X <= N or i + X > N and i <= N): # Place lamp with radius X
position = min(i + X, N)
lamps.append((position, X))
for j in range(max(1, position - X), min(N + 1, position + X + 1)):
covered[j] = True
A -= 1
else: # If no lamps can be placed, return -1
print(-1)
return

# Move to the next uncovered house
while i <= N and covered[i]:
i += 1

# After placing all lamps, check if all houses are covered
if not all(covered[1:]):
print(-1)
else:
for lamp in lamps:
print(lamp[0], lamp[1])

# Test the function
solve()
Даня ШироковУченик (101) 1 месяц назад
чел может скажешь плз
Даня ШироковУченик (101) 1 месяц назад
вроде все ок
Григорий ШвецовУченик (101) 1 месяц назад
там пениса нету дебил было бы 1000 из 1000 zov
Даня ШироковУченик (101) 1 месяц назад
за такую ошибку снижали бы не 10 балов а 100 сразу
Даня Широков, так а в чем ошибка скажите
Анисимов РоманУченик (105) 1 месяц назад
а где там ошибка ?
Даня Эндорфинов Ученик (114) Анисимов Роман, вот именно,что я не могу понять
Рома ЛебедевЗнаток (306) 1 месяц назад
нашел ошибку?
Арсений ГоворухинУченик (103) 1 месяц назад
Нашли ошибку , помогите пж со 2
Арсений ГоворухинУченик (103) 1 месяц назад
def place
_Lanterns(N, A, X, B, Y):
Lanterns = C7
current_house = 1
while current_house <= N:
if A > 0 and (B == 0 or X >= Y) :
lanterns. append ((current_house, X))
A -= 1
current_house += X + 1
elif B > 0:
lanterns. append ( (current_house, Y))
B -= 1
current_house += Y + 1
else:
return -1 : * Небозможно осбетить бсе дома
return lanterns
В Пример использования
N = int(inputO)
A = intlinputO)
k=int(inputO)
B = incitputO)
lanterns = place_lanterns(N, A, X, B, Y)
if lanterns == -1:
print(-1)
else:
for lantern in lanterns:
print(lantern[9], lantern [1])
Даня ВасильевУченик (105) 1 месяц назад
а какой это язык программирования ?
Евгений Саврасов Знаток (391) 1 месяц назад
На с++

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<bool> covered(100001, false);

int placeLamps(int N, int A, int X, int B, int Y) {
if (N == 1) {
if (A > 0) {
cout << 1 << ' ' << X << endl;
return 1;
} else if (B > 0) {
cout << 1 << ' ' << Y << endl;
return 1;
} else {
cout << "-1" << endl;
return -1;
}
}

int i = 1;
while (i <= N) {
if (B > 0 && (i + Y <= N || i + Y > N && i <= N)) {
int pos = min(i + Y, N);
cout << pos << ' ' << Y << endl;
for (int j = max(1, pos - Y); j <= min(N, pos + Y); j++) {
covered[j] = true;
}
B--;
} else if (A > 0 && (i + X <= N || i + X > N && i <= N)) {
int pos = min(i + X, N);
cout << pos << ' ' << X << endl;
for (int j = max(1, pos - X); j <= min(N, pos + X); j++) {
covered[j] = true;
}
A--;
} else {
cout << "-1" << endl;
return -1;
}
i++;
while (i <= N && covered[i]) {
i++;
}
}

if (!all_of(covered.begin()

но я не тестил
Антон АнпилоговУченик (101) 1 месяц назад
90/100
Евгений Саврасов Знаток (391) Антон Анпилогов, ну хз напиши условия еще раз
Антон АнпилоговУченик (101) 1 месяц назад
на олимпиаде, пишет 90/100 частично верно, а это пишется ниже
Илья Дракошев Ученик (103) 1 месяц назад
def light_houses(N, A, X, B, Y):
position = 1 # Начинаем с первого дома
result = [] # Список для хранения решения

while position <= N:
# Проверяем максимальное расстояние, на котором можем установить фонарь
if A > 0 and (position + X - 1) >= N: # Можно освещать диапазон, покрывающий все дома
result.append((position, X))
A -= 1
break # Все дома освещены
elif B > 0 and (position + Y - 1) >= N:
result.append((position, Y))
B -= 1
break # Все дома освещены

# Если остались дома, которые нужно освещать
if A > 0 and (position + X - 1) >= position:
result.append((position, X))
A -= 1
position += X # Переходим к следующему неосвещённому дому
elif B > 0 and (position + Y - 1) >= position:
result.append((position, Y))
B -= 1
position += Y # Переходим к следующему неосвещённому дому
else:
print(-1) # Если ни один из фонарей не может освещать следующий дом
return

# Выводим результат
for pos, dist in result:
print(pos, dist)

# Ввод данных
N = int(input().strip())
A = int(input().strip())
X = int(input().strip())
B = int(input().strip())
Y = int(input().strip())

# Запуск функции
light_houses(N, A, X, B, Y)
Егор Князев Ученик (97) 1 месяц назад
Фонари

Ограничение по времени: 1 секунда Ограничение по памяти: 256 мегабайт

Вдоль прямой улицы на равном расстоянии располагаются № домов. Будем считать расстояние между домами за единицу длины.

Около каждого дома можно поставить один фонарь. Всего имеется

А фонарей, которые могут освещать дома на расстоянии Х (включительно), и В фонарей, которые могут освещать дома на расстоянии У (включительно). В частности, при Х 0 или У 0 такой фонарь освещает только тот дом, у которого он установлен.

Вам необходимо расставить минимальное число фонарей так, чтобы все дома были освещены. Один дом может быть освещён несколькими фонарями. Освещать участки улицы между домами необязательно.
Формат входных данных

Первая строка входных данных содержит целое число № (1 ≤ N ≤ 105). Следующие четыре строки содержат целые неотрицательные числа А, Х, В и У соответственно, которые не превосходят 105.

Формат выходных данных

Программа должна вывести столько строк, сколько фонарей необходимо установить. Каждая строка должна содержать два целых числа через пробел - координату фонаря и расстояние, которое он освещает (то есть одно из чисел Х или У).

Координаты представляют из себя целые числа от 1 до №, рядом с каждым домом можно поставить только один фонарь.

При наличии нескольких правильных ответов можно вывести любой из них. Если ответа не существует, программа дллжна вывести одно число -1.
Система оценки

Решения, правильно работающие при А 0 или В = 0, будут оцениваться в 30 баллов.

Решения, правильно работающие при А ≠ 0, В ≠ 0, n ≤ 1000, будут оцениваться в 40 баллов.

Замечание

В ответе к первому примеру фонарь у дома 2 освещает также дома 1 и 3, фонарь у дома 5 также дома 3, 4, 6 и 7, а фонарь у дома 9 также дома 8 и 10. В результате все дома освещены.

Во втором примере фонарей недостаточно.
Ввод
10
3
1
1
2

10
1
1
1
2
Вывод
2 1
5 2
9 1

-1
Антон рвп Ученик (119) 1 месяц назад
Продам ответы на 490 баллов

50 руб.

тг. sneja707
Altan Bembetov Ученик (100) 1 месяц назад
def solve():
N = int(input())
A = int(input())
X = int(input())
B = int(input())
Y = int(input())

if N == 1:
if A > 0:
print(1, X)
elif B > 0:
print(1, Y)
else:
print(-1)
return

covered = [False] * (N + 1)
lamps = []
i = 1

while i <= N:
if B > 0 and (A == 0 or Y >= X):
position = min(i + Y, N)
lamps.append((position, Y))
for j in range(max(1, position - Y), min(N + 1, position + Y + 1)):
covered[j] = True
B -= 1
elif A > 0:
position = min(i + X, N)
lamps.append((position, X))
for j in range(max(1, position - X), min(N + 1, position + X + 1)):
covered[j] = True
A -= 1
else:
print(-1)
return

while i <= N and covered[i]:
i += 1

if not all(covered[1:]):
print(-1)
else:
for lamp in lamps:
print(lamp[0], lamp[1])

solve()
Эдуард Ромеович Знаток (330) 4 недели назад
N = int(input()) # количество домов
A = int(input()) # количество фонарей с радиусом X
X = int(input()) # радиус X
B = int(input()) # количество фонарей с радиусом Y
Y = int(input()) # радиус Y
if A*2*(X+1)+B*2*(Y+1)<N: # проверяем, если колич. #фонарей не хватает
print(-1) # чтобы осветить все дома, печатаем -1
exit() # и выходим из программы
elif X<Y: # сначала будем ставить лампы с большим #радиусом освещения
X,Y=Y,X # поэтому проверяем, что вначале ввели #лампы большого радиуса
A,B=B,A # если нет, меняем местами



kon=X+1 #позиция первого фонаря
i=1 # это счетчик , чтобы сравнить с начальным #количеством сколько поставил фонарей
#print("A,B= ",A,B,X,Y)
while kon<N and i<=A:
print(kon,X)
kon = kon+2*X+1 # ставим фонари через каждые 2*X+1
i+=1

#print(kon)
a=kon-(X+1) # это номер дома где закончились фонари #с большим радиусом освещения
kon2=a+1+Y # ставим первый фонарь маленького #радиуса
i2=1 # это счетчик , чтобы сравнить с начальным #количеством
#print("A,B= ",A,B,X,Y)
while kon2<N and i2<=B:
proverka=kon2+Y

print(kon2,Y)

kon2 = kon2+2*Y+1 # ставим фонари через каждые #2*Y+1
i2+=1
#проверяем освещение , может не хватать один фонарь #малого радиуса,если не хватает, добавляем
if N-proverka>=Y:
print(proverka+Y,Y)
Эдуард РомеовичЗнаток (330) 4 недели назад
вместо if A*2*(X+1)+B*2*(Y+1)<N надо

if A*2*(X+1)+B*2*Y<N
Похожие вопросы