Meta Hacker Cup — вопросы A, B1, C1

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

A: Вторые руки

import sys

sys.stdin = open('second_hands_input.txt', 'r')

C = int(sys.stdin.readline())
res =[]
for i in range(C):
    arr = [int(x) for x in sys.stdin.readline().split()]
    N, T = arr[0], arr[1]
    S = [int(x) for x in sys.stdin.readline().split()]
    if N > (T*2):
        res.append(False)
        continue
    more_than_twice = False
    hist = {}
    for el in S:
       if el in hist:
           hist[el] += 1
       else:
           hist[el] = 1
       if hist[el] > 2:
           more_than_twice = True
           break
    res.append(not(more_than_twice))
    print(res)
sys.stdout = open('output.txt', 'w')
for i in range(C):
    if res[i]:
        sys.stdout.write(f'Case #{i+1}: YES')
        if i<C-1:
            sys.stdout.write('n')
    else:
        sys.stdout.write(f'Case #{i+1}: NO')
        if i<C-1:
            sys.stdout.write('n')
Войти в полноэкранный режим Выйти из полноэкранного режима

B1: Второй друг

import sys
sys.stdin = open('second_friend_input.txt', 'r')
sys.stdout = open('output.txt', 'w')
N = int(sys.stdin.readline())
for n in range(N):
    sudo = [int(x) for x in sys .stdin.readline().split()]
    R, C = sudo[0], sudo[1]
    tree_present = False
    for r in range(R):
        arr = list(sys.stdin.readline())
        for c in range(C):
            if arr[c] == '^':
                tree_present = True
                break
    if tree_present:
        if (R<2) or (C<2):
            sys.stdout.write(f'Case #{n+1}: Impossible')
            sys.stdout.write('n')
        else:
            sys.stdout.write(f'Case #{n+1}: Possible')
            for i in range(R):
                sys.stdout.write('n')
                for i in range(C):
                    sys.stdout.write('^')
            sys.stdout.write('n')

    else:
        sys.stdout.write(f'Case #{n+1}: Possible')
        for i in range(R):
                sys.stdout.write('n')
                for i in range(C):
                    sys.stdout.write('.')
        sys.stdout.write('n')
Войти в полноэкранный режим Выход из полноэкранного режима

C1: Второй смысл

import sys
sys.stdin = open('second_meaning_input.txt', 'r')
sys.stdout = open('output_final.txt', 'w')
T = int(sys.stdin.readline())
for t in range(T):
    res = []
    N = int(sys.stdin.readline())
    c = sys.stdin.readline()
    sys.stdout.write(f'Case #{t+1}:')
    sys.stdout.write('n')
    first_code = c[0]
    if first_code == '.':
        for n in range(N-1):
            c = '-' + c
            sys.stdout.write(f'{c}')
    else:
        for n in range(N-1):
            c = '.' + c
            sys.stdout.write(f'{c}')


Войти в полноэкранный режим Выйти из полноэкранного режима

Замечания

Это были вопросы, которые я решал для квалификационного раунда. Постараюсь загрузить решения других вопросов до начала следующего раунда для тренировки.

Оцените статью
devanswers.ru
Добавить комментарий