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

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

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

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



Сообщение: 104
ссылка на сообщение  Отправлено: 31.08.22 10:20. Заголовок: №5316 (27.120) ошибка в решении


Здравствуйте!

В одном из решений в файле "27-120_shastin.py" есть следующая ошибка:

 
F = open('27-120a.txt')
N = int(F.readline())
line = ''
for i in range(N):
x = F.readline().strip()
if x == '1':
line += '_'
if len(line) > 2 and line[-3:] == '___':
line = line[:-3] + '..#..'
else:
line += '.'
line = line.split('#')
count = 0
for s in line:
count += (((len(s) * (len(s) + 1))) - (len(s) * (len(s) + 1))%2)//2
print(count - len(line) + 1)


Решение не учитывает вариант, когда подряд может идти больше трех единиц, например:

 
7
2
3
1
1
1
1
2

Правильный ответ 17, алгоритм выдает 19. Связано это с неправильной заменой подстроки:
 
# неправильно
line = line[:-3] + '..#..'

# правильно
line = line[:-3] + '..#__'


Еще один момент заключается в том, что для вычисления количества вариантов используется странная формула, в которой есть лишнее вычитаемое:
 
count += (((len(s) * (len(s) + 1))) - (len(s) * (len(s) + 1))%2)//2

При любом s (четном или нечетном) оно всегда дает 0, какой-то смысл в этом вычитаемом отсутствует, а сама формула подсчета вариантов это формула суммы чисел от 1 до n (в ней тоже нет этого вычитаемого).

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





Сообщение: 105
ссылка на сообщение  Отправлено: 31.08.22 10:25. Заголовок: Более того, для того..


Более того, для того, чтобы подсчитывать количество вариантов не при каждом шаге, а только на "стыках", не нужно использовать строку, как это сделано в двух последних предложенных решениях в этом файле. Достаточно просто сохранять предыдущий стык. Использование строки только запутывает решение, как мне кажется.

 
n = None
checker = 0
count = 0
iPrev = -1


with open('27-120b.txt') as f:

n = int(f.readline())

for i, x in enumerate(f):

x = int(x)

if x == 1: checker += 1
else: checker = 0

if checker == 3:

amount = i - 1 - iPrev
count += amount * (amount + 1) // 2 - 1
checker = 2
iPrev = i - 2

amount = n - 1 - iPrev
count += amount * (amount + 1) // 2
print(count)


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



Сообщение: 107
ссылка на сообщение  Отправлено: 06.09.22 13:06. Заголовок: ап..


ап

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



Не зарегистрирован
ссылка на сообщение  Отправлено: 06.09.22 13:43. Заголовок: Здравствуйте! Это ре..


Здравствуйте! Это решение просто забыл удалить из файла. Ниже верное (на строках; оно было сделано "забавы ради"). Спасибо, файл поправим!

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




Сообщение: 3682
ссылка на сообщение  Отправлено: 06.09.22 14:09. Заголовок: Решение заменено. Сп..


Решение заменено. Спасибо за замечание.

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

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