На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Сообщение: 9
ссылка на сообщение  Отправлено: 12.06.22 08:16. Заголовок: Задача № 5278


Еще раз добрый день! с заданием А разобралась. Ответ получаю верный. Задание В за обозримое время не выполняет...
  
f = open('c:/1.txt')
n = int(f.readline())
s = [int(c) for c in f.readlines()]
f.close()


def ff(n):
global s
k = 0
for c in s:
if c <= n:
k = c
else:
break
return k


w = [(0, 0), (0, 0), (0, 0)]
while s:
h1 = [[c[0] + 15, s[0]] for c in w]
h1 += [[c[0], c[1], s] for c in w if s[0] <= c[1]]
h1 += [[c[0] + 40, ff(s[0] + 10)] for c in w]
h1 += [[c[0] + 70, ff(s[0] + 20)] for c in w]
w = h1
aa = []
for kol in range(max([c[1] for c in w]) + 1):
ww = [c for c in w if c[1] == kol]
if ww: aa.append(min(ww))
w = aa
# print(len(s))
s = s[1::]
if len(s) % 1000 == 0:
print(len(s))
print(min(w))


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]





Сообщение: 2
ссылка на сообщение  Отправлено: 14.06.22 14:39. Заголовок: В вашем коде есть 2 ..


В вашем коде есть 2 конструкции, которые не позволяют дождаться ответа для файла b.
 
def ff(n):
global s; k = 0
for c in s:
if c <= n: k = c
else: break
return k
количество выполнений для каждого вызова растет до n, а этих вызовов у вас 2

for kol in range(max([c[1] for c in w]) + 1):  
ww = [c for c in w if c[1] == kol]
if ww: aa.append(min(ww))

тут количество выполнений в среднем для файла a 15 000 и для файла b 150 000

Сложность вашего алгоритма чуть выше чем O(n^2).

Вам не нужно считывать сразу в массив весь файл, постарайтесь использовать память разумно. В условии есть подсказка, что вам нужно прибавлять значение только тогда, когда закончился пропуск (без этого замечания ответ будет таким же). Используйте метод префиксных сумм. Сложность алгоритма станет линейной.

Мне кажется, что лучше переписать большую часть кода. Не злоупотребляйте генераторами там, где это не нужно, например тут
 max([c[1] for c in w]) 

Также давайте соответствующие имена переменным или пишете комментарии, если отправляете на форум 27 задание.

Желаю успехов!

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 10
ссылка на сообщение  Отправлено: 15.06.22 16:36. Заголовок: Спасибо большое!..


Спасибо большое!

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 3011
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет