иван сабуров
Знаток
(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}")
Круглов ГеоргийУченик (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()
Арсений ГоворухинУченик (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])
Евгений Саврасов
Знаток
(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()
но я не тестил
Илья Дракошев
Ученик
(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
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)
Ограничение по времени: 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