#z26 Статград октябрь 2022 года
f=open('26.txt') # открытие файла с данными
N=int(f.readline()) # начальное кол-во контейнеров
print(N) # отладочная печать
eps=5 # необходимый зазор
BB=[] # список размеров контейнеров
for _ in range(N): # чтение списка
x=int(f.readline())
BB.append(x)
BB.sort() # сортировка по возрастанию (отбор будем проводить с "хвоста")
rez=[] # для хранения результатов (можно без списка)
while BB : # пока стек не пуст
p=BB.pop() # вытащили "верхний" (самый большой)
k=1 # открыли счёт
AA=[] # новый стек для откладывания
while BB : # перебор стека
x=BB.pop() # вытащили "верхний"
if p-x<eps : AA.append(x) # "плохой" размер -> отложили в AA
else: # подходит
k+=1 # маркируем
p=x # меняем размер пустого
BB=AA[::-1] # переворачиваем стек
rez.append(k) # добавляем результат
print(len(rez),max(rez)) # печать ИТОГОВ
|
#z26 Статград декабрь 2022 года
f=open('26.txt') # открытие файла с данными
sss=f.read().split('\n') # чтение всех строк из файла
print(len(sss)) # отладочная печать
print(sss[-5:])
eps=5 # необходимый зазор
BB=[] # список описаний контейнеров (размер, цвет)
for ss in sss[:-1]: # заполнение списка описаний
x,y=ss.split()
BB.append((int(x),y))
BB.sort() # сортировка по возрастанию (отбор будем проводить с "хвоста")
rez=[] # для хранения результатов (можно без списка)
while BB : # пока стек не пуст
pt=BB.pop() # вытащили "верхний" (самый большой)
p,t=pt[0],pt[1] # p-размер, t - цвет
k=1 # открыли счёт
AA=[] # новый стек для откладывания
while BB : # перебор стека
xy=BB.pop() # вытащили "верхний"
x,y=xy[0],xy[1]
if (p-x<eps) or (y==t) : AA.append((x,y)) # "плохой" размер или цвет -> отложили в AA
else: # подходит
k+=1 # маркируем
p,t =x ,y # меняем размер и цвет пустого
BB=AA[::-1] # переворачиваем стек
rez.append(k) # добавляем результат
print(max(rez),len(rez)) # печать ИТОГОВ
|
#z26 Статград декабрь 2022 года
def lines(A,m): # вычисления числа линий с строке, заданной множеством точек
# m - миниальное число точек, принимаемое за линию
B=list(A) # перевод в список
B.sort() # сортировка списка
B.append(-1) # добавление барьера - гарантия обработки последней линии
n=0 # кол-во линий в строке
j=1 # длина текущей линии
for i in range(1,len(B)): # пробег с 2-го места (1-е учли в j=1)
if B[i]-B[i-1]==1: j+=1 # линия продолжается
else : # линия закончилась, обработка
if j>=m : n+=1 # фиксация линии требуемой длины
j=1 # сброс указателя линии
B.clear() # очистка вспомогательного списка (необязательно)
return n # возврат числа линий
f=open('26.txt') # открытие файла
N=int(f.readline()) # чтение числа записей
print(N) # отладочная печать
DD=[] # список для координат точек
for _ in range(N): # чтение данных
x,y=map(int,f.readline().split()) # координаты точки
DD.append((x,y)) # добавление в список
DD.sort() # сортировка по номерам строк
DD.append((-1,-1)) # добавление барьера остановки
print('Ok') # отладочная печать (большой объём данных)
rezK,rezL=0,0 # результаты: число линий в строке, номер строки (макс.)
nr,y=DD[0] # 1-я точка : координаты
A=set() # множество для точек строки (точки могут совпадать)
A.add(y) # заполнение стартовой точкой
for ii in range (1,len(DD)) : # получение точек одной строки
x,y=DD[ii] # чтение координат очередной точки
if x==nr : # проверка совпадения номеров строк
A.add(y) # добавление точки в множество координат
else: # формирование координат строки завершено
k=lines(A,3) # вычисление числа линий в строке
if k>=rezK : # проверка и фиксация результата (учёт макс. номера ряда)
rezK,rezL=k,nr
nr=x # изменение номера текущей строки
A=set() # сброс множества координат
A.add(y) # добавление 1-й точки
print(rezK,rezL) # вывод результатов
|
#z26 Статград март 2023 года
def lines(A,m): # вычисления макс. длины линии с строке, заданной множеством точек
# m - максимальное число идущих подря темных точек в линии
B=list(A) # перевод в список
B.sort() # сортировка списка
B.append(-m) # добавление барьера: -m гарантия обработки последней линии
n=0 # максимальное кол-во точек в линии
j=1 # длина текущей линии
for i in range(1,len(B)): # пробег с 2-го места (1-е учли в j=1)
d=B[i]-B[i-1] # возвожное увеличение в линии
if d-1<=m: # d-1 = числу темных точек между B[i-1] и B[i]
j+=d # линия продолжается
else : # линия закончилась, обработка
n=max(n,j) # фиксация максимальной длины линии
j=1 # сброс длины линии
B.clear() # очистка вспомогательного списка (необязательно)
return n # возврат максимальной длины линий в строке
f=open('26.txt') # открытие файла
N=int(f.readline()) # чтение числа записей
print(N) # отладочная печать
DD=[] # список для координат точек
for _ in range(N): # чтение данных
x,y=map(int,f.readline().split()) # координаты точки
DD.append((x,y)) # добавление в список
DD.sort() # сортировка по номерам строк
DD.append((-1,-1)) # добавление барьера остановки
print('Ok') # отладочная печать (большой объём данных)
rezK,rezL=0,0 # результаты: макс. длина линии в строке, номер строки (макс.)
nr,y=DD[0] # 1-я точка : координаты
A=set() # множество для точек строки (точки могут совпадать)
A.add(y) # заполнение стартовой точкой
for ii in range (1,len(DD)) : # получение точек одной строки
x,y=DD[ii] # чтение координат очередной точки
if x==nr : # проверка совпадения номеров строк
A.add(y) # добавление точки в множество координат
else: # формирование координат строки завершено
k=lines(A,7) # вычисление макс. длины линии в строке
if k>=rezK : # проверка и фиксация результата (учёт макс. номера ряда)
rezK,rezL=k,nr
nr=x # изменение номера текущей строки
A=set() # сброс множества координат
A.add(y) # добавление 1-й точки
print(rezK,rezL) # вывод результатов
|