Субота, 18.11.2017, 22:18
Головна Реєстрація Вхід
Вітаю Вас, Гість · RSS
Меню сайту
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0
Форма входу
 Авторські розв'язки
Задача A-Місце зустрічі
class Explorer:
    def __init__(self, x, y): self.ways = [(x, y)]
with file("cave.map") as f:
    cavemap = []; explorers = []; Y = 0
    for line in f:
        mapline = [None] * len(line); X = 0
        for c in line[:-1]:
            if c == '.': mapline[X] = set()
            elif c == '*':
                e = Explorer(X, Y); explorers.append(e)
                mapline[X] = set([e])
            X += 1
        cavemap.append(mapline); Y += 1
    N = len(explorers)

def GoTo(explorer, x, y):
    if 0 <= x < X and 0 <= y < Y:
        place = cavemap[y][x]
        if place != None and explorer not in place:
            place.add(explorer); explorer.ways.append((x, y))
            return len(place)
    return 0
time = 0; maxmeet = 1
while maxmeet < N and any(explorer.ways for explorer in explorers):
    time += 1
    for explorer in explorers:
        ways = explorer.ways; explorer.ways = []
        for x, y in ways:
            maxmeet = max([GoTo(explorer, x - 1, y),
                           GoTo(explorer, x, y - 1),
                           GoTo(explorer, x + 1, y),
                           GoTo(explorer, x, y + 1),
                           maxmeet])
with file("cave.res", "w") as f:
    print >> f, time

Задача B-Хакер
with file("password.dat") as f:
    H = int(f.readline())
mincode = 33; maxcode = 126;
maxchars = 24
password = []
h = 0; nh = mincode
while nh <= H and len(password) < maxchars:
    h = nh; password.append(mincode)
    nh = h * 2 + mincode
for i in reversed(range(len(password))):
    password[i] += (H - h) / (2 ** i)
    if password[i] > maxcode: password[i] = maxcode
    h += (password[i] - mincode) * (2 ** i)
password = "".join(chr(c) for c in reversed(password))
with file("password.res", "w") as f:
    print >> f, password

Задача С-Немає здачі
# encoding: UTF8
with file("market.dat") as f:
    N = int(f.readline())
    A = [int(x) for x in f.readline().split()]
    B = [int(x) for x in f.readline().split()]
S = (sum(A) - N) % 1000; C = A + B; A = [True] + [False] * 999
for v in C:
    for i in xrange(999, v - 1, -1): A[i] = A[i] or A[i - v]
with file("market.res", "w") as f:
    print >> f, "Будь ласка." if A[S] else "Немає здачі."
Copyright MyCorp © 2017
Пошук
Календар
«  Листопад 2017  »
ПнВтСрЧтПтСбНд
  12345
6789101112
13141516171819
20212223242526
27282930
Архів записів
Друзі сайту
Обдаровані діти

Хмельницькі олімпіади

НМЦ ІКТ і ДН

Портал ХОІППО