Информатика | Илья Андрианов | itpy 🧑‍💻
1.04K subscribers
265 photos
21 videos
19 files
634 links
По рекламе: @ilandroxxy

Шпаргалки: clck.ru/3FwqWt
📚 Наши курсы: clck.ru/3FwqYb

Разборы: clck.ru/3Fwqay
💬 Чатик: clck.ru/3FwqZa

📺 YouTube: clck.ru/3FwqbX

🙋‍♂️ Я автор: @ilandroxxy
Download Telegram
🚩🚩 Разбор ДВ #2024 номера #27 по информатике #ЕГЭ27

🚩 Условие задачи:
Пусть S - последовательность из N целых чисел, пронумерованных подряд, начиная с 1. Обозначим S_i,S_j, S_k как три элемента последовательности S, где і < j < k. Определите в последовательности S три таких члена S_i, S_j, S_k, что S_i > S_j, S_k > S_j и значение выражения (S_i -S_i) + (S_k-S_j) максимально.
Гарантируется, что в последовательности есть три числа S_i, S_j, S_k, удовлетворяющие условию задачи.

Входные данные
Дано два входных файла [файл А и файл В), каждый из которых в первой строке содержит число N [5 < N < 10 000 000] - количество целых чисел. Каждая из следующих N строк содержит одно целое число, не превышающее по модулю 1000.
В ответ укажите два числа: сначала значение искомой величины для файла А, затем - для файла В.

👩‍💻 Код решения:
f = open('27.txt')
n = int(f.readline())
M = [int(i) for i in f]
res = 0
for i in range(n):
for j in range(i+1, n):
for k in range(j+1, n):
s1 = M[i]
s2 = M[j]
s3 = M[k]
if s1 > s2 < s3:
res = max(res, (s1 - s2) + (s3 - s2))
print(res)
res = 0
m1 = m2 = m3 = r1 = 0
for i in range(n - 2):
m1 = max(m1, M[i])
if m1 - M[i+1] > r1:
r1 = m1 - M[i + 1]
m2 = M[i + 1]
m3 = M[i + 2]
res = max(res, m3 - m2 + r1)
print(res)


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
7632
2⃣7⃣ Разбор / Шпаргалка номера #ЕГЭ27
Задача 21425
#kege по информатике #шпора
Автор: Досрочная волна 2025
Уровень: Базовый


PS: Для начала просто внимательно прочитайте условие задачи и сравните его с оригиналом! Также публикую код решения, но пока без комментариев - они будут добавлены постами ниже.

❗️Продолжение разбора 27 номера будет в нескольких постах ниже.

🚩 Условие задачи:
В файле A хранятся данные о звёздах двух кластеров. В файле B хранятся данные о звёздах трёх кластеров.

Для каждого файла определите координаты центра каждого кластера. Затем вычислите четыре числа:
1. PxA – среднее арифметическое абсцисс центров кластеров файла А.
2. PyA – среднее арифметическое ординат центров кластеров файла А.

3. PxB – среднее арифметическое абсцисс центров кластеров файла B.
4. PyB – среднее арифметическое ординат центров кластеров файла B.


В ответе запишите четыре числа: в первой строке сначала целую часть произведения PxA * 10000, затем целую часть произведения Py*10000 для файла А, во второй строке – аналогичные данные для файла B.


🚩 Теоретическая справка:
При этом будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных точек кластера минимальна.

А расстояние между двумя точками на плоскости между точками A(x1, y1) и B(x2, y2) вычисляется по формуле: d(A,B)= ((x2 - x1)**2 + (y2 - y1)**2)**0.5



👩‍💻 Код решения:
from math import dist
clustersA = [[], []]
clustersB = [[], [], []]

for s in open('27_A.txt'):
s = s.replace(',', '.')
x, y = [float(i) for i in s.split()]
if y > 0:
clustersA[0].append([x, y])
else:
clustersA[1].append([x, y])


for s in open('27_B.txt'):
s = s.replace(',', '.')
x, y = [float(i) for i in s.split()]
if x > 0 and y > 0:
clustersB[0].append([x, y])
elif x > 0 and y < 0:
clustersB[1].append([x, y])
else:
clustersB[2].append([x, y])


def center(cl):
R = []
for p in cl:
summa=sum(dist(p, g) for g in cl)
R.append([summa,p])
return min(R)[1]


centersA = [center(cl) for cl in clustersA]
pxA = sum(x for x, y in centersA) / 2 * 10000
pyA = sum(y for x, y in centersA) / 2 * 10000
print(int(pxA), int(pyA))

centersB = [center(cl) for cl in clustersB]
pxB = sum(x for x, y in centersB) / 3 * 10000
pyB = sum(y for x, y in centersB) / 3 * 10000
print(int(pxB), int(pyB))

Ответ:
167990 73043
122627 29105

Файлы для решения задачи:
27_A.xlsx 27_A.txt
27_B.xlsx 27_B.txt


#⃣ Полный список разборов в одном месте
#⃣ Шпаргалки по всем остальным номерам ЕГЭ

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥10🔥54🤯2
Товарищи, что по реакциям, я для кого стараюсь? 🥲

⤵️ Продолжение шпаргалки по #ЕГЭ27 #useful

Первое, что необходимо сделать в этой задаче — открыть файл в Excel и, следуя инструкции на картинке, построить точечную диаграмму. С её помощью мы определим, в какой из кластеров попадает каждая точка из файла 27_B.txt.

Затем переходим к распределению этих точек в коде (обращаю внимание, что в этом примере я рассматриваю только файл B, так как он более нагляден).


👩‍💻 Код программы:
clustersB = [[], [], []]

for s in open('27_B.txt'):
s = s.replace(',', '.')
x, y = [float(i) for i in s.split()]
if x > 0 and y > 0:
clustersB[0].append([x, y])
elif x > 0 and y < 0:
clustersB[1].append([x, y])
else:
clustersB[2].append([x, y])



👩‍💻 Комментарии к коду:

1⃣ clustersB = [[], [], []]
• Создаем список из трех пустых подсписков для хранения точек трех кластеров
- clustersB[0] - первый кластер (первая четверть)
- clustersB[1] - второй кластер (четвертая четверть)
- clustersB[2] - третий кластер (вторая и третья четверти вместе)


2⃣ for s in open('27_B.txt'):
Открываем файл '27_B.txt' для чтения и построчно обрабатываем его содержимое


3⃣ s = s.replace(',', '.')
Заменяем запятые на точки для корректного преобразования в float


4⃣ x, y = [float(i) for i in s.split()]
Разбиваем строку по пробелам и преобразуем части в числа с плавающей точкой
x - первая координата (абсцисса)
y - вторая координата (ордината)


5⃣ if x > 0 and y > 0:
Распределяем точку в один из кластеров в зависимости от координат:


6⃣ clustersB[0].append([x, y])
Если обе координаты положительные - точка в первой четверти (кластер 0)


7⃣ elif x > 0 and y < 0:
Если x положительный, а y отрицательный - точка в четвертой четверти (кластер 1)

8⃣ clustersB[1].append([x, y])


0⃣ else:
Все остальные точки (вторая и третья четверти) попадают в кластер 2


🔟 clustersB[2].append([x, y])
Сюда попадают случаи:
x < 0 и y > 0 (вторая четверть)
x < 0 и y < 0 (третья четверть)
x > 0 и y = 0 (на оси X)
x < 0 и y = 0 (на оси X)
x = 0 (на оси Y, независимо от y)


#⃣ Полный список разборов в одном месте
#⃣ Шпаргалки по всем остальным номерам ЕГЭ

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
15218👍7❤‍🔥3🤔1
⤵️ Продолжение шпаргалки по #ЕГЭ27 #useful

Далее нам необходимо написать функцию для поиска центра кластера. Но прежде чем перейти к ней, реализуем вспомогательную функцию для вычисления расстояния между двумя точками.

Расстояние между двумя точками на плоскости между точками A(x1, y1) и B(x2, y2) вычисляется по формуле: d(A,B)= ((x2 - x1)**2 + (y2 - y1)**2)**0.5


Что можно описать функцией:
def d(A, B):
x1, y1 = A
x2, y2 = B
return ((x2 - x1)**2 + (y2 - y1)**2)**0.5

print(d([0, 0], [3, 4])) # 5.0


Но так же надо заметить, что эта функция уже описана в питоне, а именно в библиотеке math.

Тот же самый код, но короче через math:
from math import dist

print(dist([0, 0], [3, 4]))



#⃣ Полный список разборов в одном месте
#⃣ Шпаргалки по всем остальным номерам ЕГЭ

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
5❤‍🔥86🔥3
Продолжение шпаргалки по #ЕГЭ27 #useful

Теперь разберём функцию для поиска центра кластера. Для примера возьмём кластер:
[[0, 0], [4, 3], [2, 2], [5, 6]]

Напомню, что центром кластера называется точка, для которой сумма расстояний до всех остальных точек кластера минимальна.

Алгоритм следующий:
- Берём произвольную точку p из кластера.
- Вычисляем сумму расстояний от p до всех других точек g этого кластера.
- Повторяем для всех точек и выбираем ту, у которой сумма минимальна.

👩‍💻 Код программы:
from math import dist

def center(cl):
R = []
for p in cl:
summa = 0
for g in cl:
summa += dist(p, g)
R.append([summa,p])
return min(R)[1]


clustersA = [[[0, 0], [4, 3], [2, 2], [5, 6]], []]
cl = clustersA[0]

print(center(cl)) # [2, 2] - центр первого кластера из двух


Суммы для всех точек:

15.638676800652844 [0, 0]
10.39834563766817 [4, 3]
10.06449510224598 [2, 2]
15.972527336075034 [5, 6]



👩‍💻 Комментарии к коду:

1⃣ from math import dist
Импорт функции для вычисления евклидова расстояния между точками.


2⃣ def center(cl):
Функция, которая находит "центр" кластера (точку с минимальной суммой расстояний до остальных).


3⃣ R = []
Список для сохранения результатов.


4⃣ for p in cl:
Первый цикл – перебирает каждую точку кластера.


5⃣ summa = 0
Обнуление суммы расстояний для текущей точки p.


6⃣ for g in cl:
Вложенный цикл – вычисляет расстояние от p до всех точек g в кластере.


7⃣ summa += dist(p, g)
Накопление суммы расстояний для каждой точки p


8⃣ R.append([summa, p])
Cохранение суммы и точки p в список R.


0⃣ return min(R)[1]
Поиск точки с минимальной суммой расстояний (центр).


1⃣1⃣ clustersA = [[[0, 0], [4, 3], [2, 2], [5, 6]], []]
Тестовые данные: список из двух кластеров (второй пуст).


1⃣2⃣ cl = clustersA[0]
Выбор первого кластера для обработки.


1⃣3⃣ print(center(cl))
Вывод результата работы функции.


#⃣ Полный список разборов в одном месте
#⃣ Шпаргалки по всем остальным номерам ЕГЭ

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥76👍2
Продолжение шпаргалки по #ЕГЭ27 #useful

Кульминация решения (опять же на примере кластеров из файла B) - поиск центров кластеров и вычисление среднего арифметическое абсцисс центров кластеров файла B и среднего арифметическое ординат центров кластеров файла B.

👩‍💻 Код программы:
centersB = [center(cl) for cl in clustersB]
pxB = sum(x for x, y in centersB) / 3 * 10000
pyB = sum(y for x, y in centersB) / 3 * 10000
print(int(pxB), int(pyB))



👩‍💻 Комментарии к коду:

1⃣ centersB = [center(cl) for cl in clustersB]
Находим центры каждого кластера из списка clustersB


2⃣ pxB = sum(x for x, y in centersB) / 3 * 10000
Вычисляем среднюю x-координату центров кластеров, умножаем на 10000 и делим на 3 (масштабирование)


3⃣ pyB = sum(y for x, y in centersB) / 3 * 10000
Вычисляем среднюю y-координату центров кластеров, умножаем на 10000 и делим на 3 (масштабирование)


4⃣ print(int(pxB), int(pyB))
Выводим результат в виде целых чисел


#⃣ Полный список разборов в одном месте
#⃣ Шпаргалки по всем остальным номерам ЕГЭ

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
8❤‍🔥4👍3