Задание 27 #11

© СтатГрад 2019−2020 уч. г.
Оптимальное решение 27 #11
n = int(input())
k = 80
a = [0] * k # количество чисел меньше или равно 100
b = [0] * k # количество чисел больше 100
for i in range(n):
    num = int(input())
    ost = num % k
    if num <= 100:
        a[ost] += 1
    else:
        b[ost] += 1
result = 0
for i in range(k):
    result += a[i]*b[i] + b[i]*(b[i]-1)//2
print(result)

Формула 27 #11
s[i] = a[i] + (a[i]+1) + .. + (a[i]+b[i]-1)
s[i] = a[i]*b[i] + (1 + 2 + .. + (b[i]-1))
s[i] = a[i]*b[i] + b[i]*(b[i]-1)//2
выносить за скобку b[i] нельзя, так как (b[i]-1) может быть нечетным 

Задание 27 #10

https://inf-ege.sdamgia.ru/problem?id=6436
Оптимальное решение 27 #10
k = 16
n = int(input())
msgs = [0]*k
for i in range(n):
    x = int(input())
    msgs[x-1] += 1
pars = list(range(1, k+1))
for i in range(k-1):
    for j in range(i, k):
        if msgs[j] > msgs[i]:
            msgs[i], msgs[j] = msgs[j], msgs[i]
            pars[i], pars[j] = pars[j], pars[i]
    if msgs[i] > 0:
        print(pars[i], msgs[i])

Задание 27 #09

http://kpolyakov.spb.ru/school/ege/gen.php?action=viewAllEgeNo&egeId=27&cat89=on&cat90=on
Оптимальное решение 27 #09
N = int(input()) 
x_max = 0 
y_max = 0 
for i in range(N): 
    x, y = map(int, input().split()) 
    if x == y and abs(x) > x_max: 
        x_max = abs(x) 
    if x == -y and abs(x) > y_max: 
        y_max = abs(x) 
max_square = (x_max * y_max) 
if max_square == 0: 
    print('Треугольник не существует') 
else:
    print(max_square)

Задание 27 #08

http://kpolyakov.spb.ru/school/ege/gen.php?action=viewAllEgeNo&egeId=27&cat89=on&cat90=on
Неоптимальное решение 27 #08
N, t = int(input()), int(input()) 
a = [] 
b = [] 
for i in range(N): 
    ai, bi = map(int, input().split()) 
    a.append(ai) 
    b.append(bi) 

br = 0 
for j in range(N): 
    br += b[j] 
ar = 0 
res = br + t 
for i in range(N): 
    br -= b[i] 
    ar += a[i] 
    if ar + br + t < res: 
        res = ar + br + t 
print(res)

Оптимальное решение 27 #08
n = int(input()) 
road = int(input()) 
a = 0 
b = road 
for i in range(n): 
    ai, bi = list(map(int, input().split())) 
    a += ai 
    b = min(b+bi, a+road) 
print(b)

Задание 27 #07

http://kpolyakov.spb.ru/school/ege/gen.php?action=viewAllEgeNo&egeId=27&cat89=on&cat90=on
Оптимальное решение 27 #07
N = int(input()) 
a = [0]*100 
for i in range(N): 
    d, k = map(int, input().split()) 
    a[k % d] += 1 
if a[0] = N: 
    print(0) 
else: 
    res = 1 
for i in range(2, 100): 
    if a[i] >= a[res]: 
        res = i print(res)

Задание 27 #06

http://kpolyakov.spb.ru/school/ege/gen.php?action=viewAllEgeNo&egeId=27&cat89=on&cat90=on
Оптимальное решение 27 #06
max_7 = 0 
sec_max = 0 
x = int(input()) 
count=0 
while x != 0: 
    count += 1 
    if x % 7 == 0 and x % 49 != 0 and x > max_7: 
        max_7 = x 
    elif x % 7 != 0 and sec_max < x: 
        sec_max = x 
    x = int(input()) 
control = int(input()) 
result = sec_max*max_7 
if result == 0: 
    result = 1 
print(f'Введено чисел: {count}') 
print(f'Контрольное значение: {control}') 
print(f'Вычисленное значение: {result}') 
if result == control: 
    print('Значения совпали') 
else: 
    print('Значения не совпали')

Задание 27 #05

http://kpolyakov.spb.ru/school/ege/gen.php?action=viewAllEgeNo&egeId=27&cat89=on&cat90=on
Наборы тестовых данных для 27 #05
Набор 1:
n = 3
c = [0.1, 0.25, 0.6]
Вывод: "3"
------------
Набор 2:
n = 1
c = [1]
Вывод: "1"

Оптимальное решение 27 #05
N = int(input()) 
printed = False 
max = 0.0 
maxIndex = 0 
for i in range(1, N + 1): 
    a = float(input()) 
if a > 1.0: 
    print(i, end = "") 
    printed = True 
if a > max: 
    max = a 
    maxIndex = i 
if not printed: 
    print(maxIndex)

Задание 27 #04

http://kpolyakov.spb.ru/school/ege/gen.php?action=viewAllEgeNo&egeId=27&cat89=on&cat90=on
Начало решения 27 #04
N = int(input())
a = [0] * 4
for i in range(N):
    x, y = map(int, input().split())
    if x > 0 and y > 0:
        a[0] += 1
    elif x < 0 and y > 0:
        a[1] += 1
    elif x < 0 and y < 0:
        a[2] += 1
    elif x > 0 and y < 0:
        a[3] += 1
m = 0
for i in range(4):
    if a[i] > m:
        m = a[i]
        chet_max = i+1
print(f'K = {chet_max}')

Задание 27 #03

https://inf-ege.sdamgia.ru/problem?id=11256
Идея оптимального решения 27 #03

Разбиваем все точки на 4 группы (по четвертям 1, 2, 3, 4). Точки на осях просто не учитываются. А дальше выражаем ответ через эти 4 значения.

def one_to_n(n): 
n -= 1 
res = n * (n + 1) // 2 
return res 

s = 0 
if a1 + a2 > 2: 
    s += one_to_n(a1) * a2 
    s += one_to_n(a2) * a1 
if a3 + a4 > 2: 
    s += one_to_n(a3) * a4 
    s += one_to_n(a4) * a3 
print(s)

Задание 27 #02

https://inf-ege.sdamgia.ru/problem?id=13584
Наборы тестовых данных для 27 #02
Набор 1:
n = 2 
c = [8, 8]
Вывод: "0 0"
------------
Набор 2:
n = 9 
c = [9, 9, 9, 9, 9, 9, 9, 9, 8]
Вывод: "8 71"

Идея оптимального решения 27 #02

Складываем все числа — сумма либо кратная 8, либо нет. Если не кратная, то нужно вычесть из суммы минимальное из введенных чисел (восьмерка не в счет).
Для теста: 8х9 ; 9х8,8