Статья Автор: Попов Ярослав

Переборные решения к задаче типа 27 - Разбор

#задача 4
n, k, m = map(int, input().split()) #не совсем тупой перебор (^_^')
a = []                              #потратил 13 минут, поэтому не хочется файлы докручивать
b = [1] * (k+1) #массив координат, где может стоять постомат
for i in range(n):
    x, y = map(int, input().split())
    for j in range(max(0, x-m+1), min(x+m, k+1)): 
        b[j] = 0
    a.append([x, (y + 19) // 20])
#print(b) 
#print(a)
ans = 1e9
for j in range(1, k+1):
    if b[j] == 1:
        #print(j)
        res = 0 
        for i in range(n):
            res += a[i][1] * min(abs(a[i][0] - j), k - j + a[i][0])
            #print(j, a[i][0], abs(a[i][0] - j), (a[i][0] + j) % k, a[i][1] * min(abs(a[i][0] - j), k - j + a[i][0]))
        ans = min(ans, res)
print(ans) #738658

#задача 5
n, m = map(int, input().split()) #решение 4 минуты
a = []
for i in range(n):
    a.append(int(input()))
now = 0
l = -1
ans = 0
for r in range(n):
    now += a[r]
    while now > m: #по-хорошему надо префиксы было делать
        l += 1
        now -= a[l]
    ans = max(ans, r-l)
print(ans) #288

#задача 6
f = open("27-45788A.txt")
n = int(f.readline().strip())
a = []
for x in f.readlines():
    a.append(int(x))
ans = 0
for x in range(n):
    for y in range(x+17, n):
        for z in range(y+17, n):
            if (a[x] + a[y] + a[z]) % 7717 == 0:
                #print(a[x], a[y], a[z])
                ans += 1
    #print(round(x / n * 100, 2), "%")
print(ans)

#задача 7
f = open("27-45790A.txt")
n = int(f.readline().strip())
a = []
for x in f.readlines():
    a.append(int(x))
ans = 0
for x in range(n):
    for y in range(x+25, n):
        if (a[x] + a[y]) % 4 == 0 and (a[x] * a[y]) % 9009 == 0:
            #print(a[x], a[y], a[z])
            ans += 1
    #print(round(x / n * 100, 2), "%")
print(ans) #289

#задача 8
f = open("27A_6638.txt")
a = []
n = int(f.readline().strip())
for x in f.readlines():
    a.append([map(int, x.split())])
minn = 1e9
mini = -1
for i in range(n):
    res = 0 
    for j in range(n):
        res += abs(a[i][0] - a[j][0]) * a[j][1]
    if res < minn or (res == minn and a[i][0] < mini):
        minn = res 
        mini = a[i][0]
print(mini, minn)
 
Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать