#kege #yandex
#reshu #statgrad
#polyakov
#ЕГЭ1 #ЕГЭ10 #ЕГЭ19
#ЕГЭ2 #ЕГЭ11 #ЕГЭ20
#ЕГЭ3 #ЕГЭ12 #ЕГЭ21
#ЕГЭ4 #ЕГЭ13 #ЕГЭ22
#ЕГЭ5 #ЕГЭ14 #ЕГЭ23
#ЕГЭ6 #ЕГЭ15 #ЕГЭ24
#ЕГЭ7 #ЕГЭ16 #ЕГЭ25
#ЕГЭ8 #ЕГЭ17 #ЕГЭ26
#ЕГЭ9 #ЕГЭ18 #ЕГЭ27
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Пусть 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
Задача 21425 #kege по информатике #шпора
Автор: Досрочная волна 2025
Уровень: Базовый
PS: Для начала просто внимательно прочитайте условие задачи и сравните его с оригиналом! Также публикую код решения, но пока без комментариев - они будут добавлены постами ниже.
В файле 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
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥10🔥5❤4🤯2
Товарищи, что по реакциям, я для кого стараюсь? 🥲
⤵️ Продолжение шпаргалки по #ЕГЭ27 #useful
Первое, что необходимо сделать в этой задаче — открыть файл в Excel и, следуя инструкции на картинке, построить точечную диаграмму. С её помощью мы определим, в какой из кластеров попадает каждая точка из файла 27_B.txt.
Затем переходим к распределению этих точек в коде (обращаю внимание, что в этом примере я рассматриваю только файл B, так как он более нагляден).
👩💻 Код программы:
👩💻 Комментарии к коду:
1⃣
2⃣
3⃣
4⃣
5⃣
6⃣
7⃣
8⃣
0⃣
🔟
#⃣ Полный список разборов в одном месте
#⃣ Шпаргалки по всем остальным номерам ЕГЭ
➡ Информатика ЕГЭ | чатик itpy 🧑💻
Первое, что необходимо сделать в этой задаче — открыть файл в 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])
clustersB = [[], [], []]
• Создаем список из трех пустых подсписков для хранения точек трех кластеров
- clustersB[0] - первый кластер (первая четверть)
- clustersB[1] - второй кластер (четвертая четверть)
- clustersB[2] - третий кластер (вторая и третья четверти вместе)
for s in open('27_B.txt'):
Открываем файл '27_B.txt' для чтения и построчно обрабатываем его содержимое
s = s.replace(',', '.')
Заменяем запятые на точки для корректного преобразования в float
x, y = [float(i) for i in s.split()]
Разбиваем строку по пробелам и преобразуем части в числа с плавающей точкой
x - первая координата (абсцисса)
y - вторая координата (ордината)
if x > 0 and y > 0:
Распределяем точку в один из кластеров в зависимости от координат:
clustersB[0].append([x, y])
Если обе координаты положительные - точка в первой четверти (кластер 0)
elif x > 0 and y < 0:
Если x положительный, а y отрицательный - точка в четвертой четверти (кластер 1)
clustersB[1].append([x, y])
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)
Please open Telegram to view this post
VIEW IN TELEGRAM
15❤21 8👍7❤🔥3🤔1
Далее нам необходимо написать функцию для поиска центра кластера. Но прежде чем перейти к ней, реализуем вспомогательную функцию для вычисления расстояния между двумя точками.
Расстояние между двумя точками на плоскости между точками 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]))
Please open Telegram to view this post
VIEW IN TELEGRAM
5❤🔥8❤6🔥3
Теперь разберём функцию для поиска центра кластера. Для примера возьмём кластер:
[[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]
from math import dist
Импорт функции для вычисления евклидова расстояния между точками.
def center(cl):
Функция, которая находит "центр" кластера (точку с минимальной суммой расстояний до остальных).
R = []
Список для сохранения результатов.
for p in cl:
Первый цикл – перебирает каждую точку кластера.
summa = 0
Обнуление суммы расстояний для текущей точки p.
for g in cl:
Вложенный цикл – вычисляет расстояние от p до всех точек g в кластере.
summa += dist(p, g)
Накопление суммы расстояний для каждой точки p
R.append([summa, p])
Cохранение суммы и точки p в список R.
return min(R)[1]
Поиск точки с минимальной суммой расстояний (центр).
clustersA = [[[0, 0], [4, 3], [2, 2], [5, 6]], []]
Тестовые данные: список из двух кластеров (второй пуст).
cl = clustersA[0]
Выбор первого кластера для обработки.
print(center(cl))
Вывод результата работы функции.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7❤6👍2
Кульминация решения (опять же на примере кластеров из файла 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))
centersB = [center(cl) for cl in clustersB]
Находим центры каждого кластера из списка clustersB
pxB = sum(x for x, y in centersB) / 3 * 10000
Вычисляем среднюю x-координату центров кластеров, умножаем на 10000 и делим на 3 (масштабирование)
pyB = sum(y for x, y in centersB) / 3 * 10000
Вычисляем среднюю y-координату центров кластеров, умножаем на 10000 и делим на 3 (масштабирование)
print(int(pxB), int(pyB))
Выводим результат в виде целых чисел
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8❤🔥4👍3