Задания
Версия для печати и копирования в MS Word
Тип 27 № 56555
i

Дана по­сле­до­ва­тель­ность на­ту­раль­ных чисел. Рас­сто­я­ние между эле­мен­та­ми по­сле­до­ва­тель­но­сти  — это раз­ность их по­ряд­ко­вых но­ме­ров. На­при­мер, если два эле­мен­та стоят в по­сле­до­ва­тель­но­сти рядом, рас­сто­я­ние между ними равно 1, если два эле­мен­та стоят через один  — рас­сто­я­ние равно 2 и так далее.

Назовём парой любые два числа из по­сле­до­ва­тель­но­сти, рас­сто­я­ние между ко­то­ры­ми не мень­ше 14. Не­об­хо­ди­мо опре­де­лить ко­ли­че­ство пар, в ко­то­рых сумма чисел в паре де­лит­ся без остат­ка на 8, а их про­из­ве­де­ние  — на 19 683.

Вход­ные дан­ные.

Файл А

Файл В

Пер­вая стро­ка вход­но­го файла со­дер­жит целое число N  — общее ко­ли­че­ство чисел в на­бо­ре. Каж­дая из сле­ду­ю­щих N строк со­дер­жит одно число, не пре­вы­ша­ю­щее 100 000. Га­ран­ти­ру­ет­ся, что число в от­ве­те не пре­вы­ша­ет 2 · 109.

Вам даны два вход­ных файла (A и B), каж­дый из ко­то­рых имеет опи­сан­ную выше струк­ту­ру. В от­ве­те ука­жи­те два числа: сна­ча­ла ис­ко­мое зна­че­ние для файла A, затем  — для файла B.

 

Ответ:

Спрятать решение

Ре­ше­ние.

При­ведём ре­ше­ние пунк­та А на языке Python.

N = 1086

count = 0

f = open('27-A.txt')

s = f.readlines()

for i in range(1, len(s)):

for j in range(i, len(s)):

if j - i + 1 >= 14:

if (int(s[i]) + int(s[j])) % 8 == 0 and (int(s[i]) * int(s[j])) % 19683 == 0:

count += 1

print(count)

 

Ответ: 32  68713559.

 

При­ме­ча­ние.

Путь к файлу не­об­хо­ди­мо ука­зать со­глас­но рас­по­ло­же­нию файла на Вашем ком­пью­те­ре.

 

При­ведём ре­ше­ние Ми­ха­и­ла Ти­ли­че­е­ва на языке Python.

def count_3(num):

res = 0

while num > 0 and num % 3 == 0 and res < 9:

res += 1

num //= 3

return res

 

f = open('27.txt')

n = int(f.readline())

del_3 = [[0] * 10 for i in range(8)] # вло­жен­ный спи­сок, ко­ли­че­ство сте­пе­ней 3 со вло­жен­ны­ми ин­дек­са­ми рав­ны­ми остат­ка­ми от де­ле­ния на 8

numbers_14 = [int(f.readline()) for _ in range(14)]

count = 0

for i in range(14, n):

new_x = int(f.readline())

x = numbers_14.pop(0)

index_8 = x % 8

index_3 = count_3(x)

del_3[index_8][index_3] += 1

new_index_8 = new_x % 8

new_index_3 = count_3(new_x)

for j in range(9-new_index_3, 10):

count += del_3[(8 - new_index_8) % 8][j]

numbers_14.append(new_x)

print(count)


Аналоги к заданию № 56527: 56555 Все