Zadanie

Anička a AIčka

Počet bodov: 10

Anička chcela na súťaži z programovania získať viac bodov, a tak niektoré úlohy nechala naprogramovať svojej kamarátke AIčke.

Čo však Anička nevedela je, že na jej programy sa môžu ľudia pozerať a býva dosť jasné, kedy odovzdaný program napísala Anička a kedy AIčka. Napríklad keby kód písala Anička, asi by jej vadilo, že namiesto mäkčeňa nad c má v kóde samé ééé

Pozrime si nejaké príklady:

1:

r,c = [int(x) for x in input().split() ]

nums = [ [int(x) for x in input().split()] for _ in range(r) ]

S = sum([sum(row) for row in nums])

if r%2 or c%2:
    print(S)
    exit()

skip = min( [ min(nums[i][i%2::2]) for i in range(r)] )

print(S-skip)

2:

def max_lucky_clovers(r, c, grid):
    # Vytvoríme dva riadky pre dynamické programovanie
    prev_row = [0] * c
    curr_row = [0] * c

    # Inicializácia dolného ľavého rohu
    prev_row[0] = grid[r-1][0]

    # Naplnenie dynamickej tabuľky od dolného riadku smerom nahor
    for i in range(r-1, -1, -1):
        for j in range(c):
            # Ak sme v prvej bunke (dolný ľavý roh), už je inicializovaný
            if i == r-1 and j == 0:
                continue

            # Aktuálna hodnota je počet štvorlístkov na tomto políčku
            curr_row[j] = grid[i][j]

            # Pridáme maximum z predchádzajúcich ciest
            if i < r-1:  # Cesta zhora
                curr_row[j] += prev_row[j]
            if j > 0:  # Cesta zľava
                curr_row[j] = max(curr_row[j], grid[i][j] + curr_row[j-1])

        # Posunieme riadky na ďalšiu iteráciu
        prev_row, curr_row = curr_row, [0] * c

    # Výsledok je v pravom hornom rohu
    return prev_row[c-1]

# Vstupné spracovanie
r, c = map(int, input().split())
grid = [list(map(int, input().split())) for _ in range(r)]

# Výpočet maximálneho počtu štvorlístkov
print(max_lucky_clovers(r, c, grid) + 1)

3:

def won(grid, k, c):
    
    dirs = ( (1,0), (0,1), (1,1), (1,-1) )

    n = len(grid)

    for x in range(n):
        for y in range(n):
            for d in dirs:
                dx, dy = d
                ok = True
                nx,ny = x,y

                for i in range(k):
                    if nx < 0 or ny < 0 or nx>=n or ny>=n or grid[nx][ny] != c:
                        ok = False
                        break
                    nx += dx
                    ny += dy

                if ok:
                    return True
    return False


def solve():
    n,k = [int(x) for x in input().split()]

    old = [ input() for _ in range(n) ]

    turned = [ ''.join([ old[n-1-i][k] for i in range(n) ]) for k in range(n)]

    grid = [ '' for _ in range(n) ]

    for c in range(n):
        for r in range(n):
            zeton = turned[n-1-r][c]
            if zeton != '.':
                grid[c] += zeton

    for i in range(n):
        grid[i] = grid[i] + '.' * (n-len(grid[i]))

    Erika = won(grid, k, 'R')
    Diabol = won(grid, k, 'B')

    print(['Nikto','Erika','Diabol','Dilema'][Erika+2*Diabol])


t = int(input())

for _ in range(t):
    solve()

4:

def otoc_a_padni(siet):
    velkost = len(siet)
    otocena = [['.'] * velkost for _ in range(velkost)]

    # Otoèenie o 90° v smere hodinových ruèièiek
    for riadok in range(velkost):
        for stlpec in range(velkost):
            otocena[stlpec][velkost - 1 - riadok] = siet[riadok][stlpec]

    # Simulácia gravitácie
    for stlpec in range(velkost):
        stlpce_bez_bodiek = [otocena[riadok][stlpec] for riadok in range(velkost) if otocena[riadok][stlpec] != '.']
        for riadok in range(velkost):
            otocena[riadok][stlpec] = '.' if riadok < velkost - len(stlpce_bez_bodiek) else stlpce_bez_bodiek[
                riadok - (velkost - len(stlpce_bez_bodiek))]

    return otocena


def kontrola_vyhercu(siet, pocet_k):
    velkost = len(siet)

    def vyhra_znak(znak):
        for riadok in range(velkost):
            for stlpec in range(velkost):
                if stlpec <= velkost - pocet_k and all(
                        siet[riadok][stlpec + posun] == znak for posun in range(pocet_k)):
                    return True
                if riadok <= velkost - pocet_k and all(
                        siet[riadok + posun][stlpec] == znak for posun in range(pocet_k)):
                    return True
                if riadok <= velkost - pocet_k and stlpec <= velkost - pocet_k and all(
                        siet[riadok + posun][stlpec + posun] == znak for posun in range(pocet_k)):
                    return True
                if riadok <= velkost - pocet_k and stlpec >= pocet_k - 1 and all(
                        siet[riadok + posun][stlpec - posun] == znak for posun in range(pocet_k)):
                    return True
        return False

    vyhra_r = vyhra_znak('R')
    vyhra_b = vyhra_znak('B')

    if vyhra_r and vyhra_b:
        return "Dilema"
    elif vyhra_r:
        return "Erika"
    elif vyhra_b:
        return "Diabol"
    else:
        return "Nikto"


def riesenie_connect_k(zoznam_sieti):
    vysledky = []
    for siet in zoznam_sieti:
        velkost, pocet_k, hracia_plocha = siet
        otocena_plocha = otoc_a_padni(hracia_plocha)
        vysledok = kontrola_vyhercu(otocena_plocha, pocet_k)
        vysledky.append(vysledok)
    return vysledky


pocet_pripadov = int(input())
zoznam_sieti = []
for _ in range(pocet_pripadov):
    velkost, pocet_k = map(int, input().split())
    hracia_plocha = [input().strip() for _ in range(velkost)]
    zoznam_sieti.append((velkost, pocet_k, hracia_plocha))

vysledky = riesenie_connect_k(zoznam_sieti)
print("\n".join(vysledky))

5:

def process_unicorns(tests):
    results = []
    for test in tests:
        kyslosti = sorted(set(test[1]))  # Najskôr zoradíme unikátne kyslosti vzostupne

        n = len(kyslosti)
        result = []
        for i in range(n // 2):
            result.append(kyslosti[-(i + 1)])  # Najkyslejšia
            result.append(kyslosti[i])  # Najmenej kyslá

        if n % 2 == 1:  # Ak je počet kyslostí nepárny, pridáme poslednú strednú hodnotu
            result.append(kyslosti[n // 2])

        results.append((len(result), result))

    return results


# Vstup
J = int(input())
tests = []

for _ in range(J):
    n = int(input())
    kyslosti = list(map(int, input().split()))
    tests.append((n, kyslosti))

# Spracovanie
results = process_unicorns(tests)

# Výstup
for res in results:
    print(res[0])
    print(" ".join(map(str, res[1])))

Vstup a Výstup

Na vstupe dostanete číslo programu uvedeného vyššie, od 1 do 5.

Vypíšte Anicka ak ten program napísala Anička, a AIcka ak ho napísala AIčka.

Príklad

Input:

0

Output:

Anicka

Len príklad výstupu. V bodovaných vstupoch dostanete číslo 1 až 5.

Pre odovzdávanie sa musíš prihlásiť.