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:
= [int(x) for x in input().split() ]
r,c
= [ [int(x) for x in input().split()] for _ in range(r) ]
nums
= sum([sum(row) for row in nums])
S
if r%2 or c%2:
print(S)
exit()
= min( [ min(nums[i][i%2::2]) for i in range(r)] )
skip
print(S-skip)
2:
def max_lucky_clovers(r, c, grid):
# Vytvoríme dva riadky pre dynamické programovanie
= [0] * c
prev_row = [0] * c
curr_row
# Inicializácia dolného ľavého rohu
0] = grid[r-1][0]
prev_row[
# 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
= grid[i][j]
curr_row[j]
# Pridáme maximum z predchádzajúcich ciest
if i < r-1: # Cesta zhora
+= prev_row[j]
curr_row[j] if j > 0: # Cesta zľava
= max(curr_row[j], grid[i][j] + curr_row[j-1])
curr_row[j]
# Posunieme riadky na ďalšiu iteráciu
= curr_row, [0] * c
prev_row, curr_row
# Výsledok je v pravom hornom rohu
return prev_row[c-1]
# Vstupné spracovanie
= map(int, input().split())
r, c = [list(map(int, input().split())) for _ in range(r)]
grid
# Výpočet maximálneho počtu štvorlístkov
print(max_lucky_clovers(r, c, grid) + 1)
3:
def won(grid, k, c):
= ( (1,0), (0,1), (1,1), (1,-1) )
dirs
= len(grid)
n
for x in range(n):
for y in range(n):
for d in dirs:
= d
dx, dy = True
ok = x,y
nx,ny
for i in range(k):
if nx < 0 or ny < 0 or nx>=n or ny>=n or grid[nx][ny] != c:
= False
ok break
+= dx
nx += dy
ny
if ok:
return True
return False
def solve():
= [int(x) for x in input().split()]
n,k
= [ input() for _ in range(n) ]
old
= [ ''.join([ old[n-1-i][k] for i in range(n) ]) for k in range(n)]
turned
= [ '' for _ in range(n) ]
grid
for c in range(n):
for r in range(n):
= turned[n-1-r][c]
zeton if zeton != '.':
+= zeton
grid[c]
for i in range(n):
= grid[i] + '.' * (n-len(grid[i]))
grid[i]
= won(grid, k, 'R')
Erika = won(grid, k, 'B')
Diabol
print(['Nikto','Erika','Diabol','Dilema'][Erika+2*Diabol])
= int(input())
t
for _ in range(t):
solve()
4:
def otoc_a_padni(siet):
= len(siet)
velkost = [['.'] * velkost for _ in range(velkost)]
otocena
# Otoèenie o 90° v smere hodinových ruèièiek
for riadok in range(velkost):
for stlpec in range(velkost):
- 1 - riadok] = siet[riadok][stlpec]
otocena[stlpec][velkost
# Simulácia gravitácie
for stlpec in range(velkost):
= [otocena[riadok][stlpec] for riadok in range(velkost) if otocena[riadok][stlpec] != '.']
stlpce_bez_bodiek for riadok in range(velkost):
= '.' if riadok < velkost - len(stlpce_bez_bodiek) else stlpce_bez_bodiek[
otocena[riadok][stlpec] - (velkost - len(stlpce_bez_bodiek))]
riadok
return otocena
def kontrola_vyhercu(siet, pocet_k):
= len(siet)
velkost
def vyhra_znak(znak):
for riadok in range(velkost):
for stlpec in range(velkost):
if stlpec <= velkost - pocet_k and all(
+ posun] == znak for posun in range(pocet_k)):
siet[riadok][stlpec return True
if riadok <= velkost - pocet_k and all(
+ posun][stlpec] == znak for posun in range(pocet_k)):
siet[riadok return True
if riadok <= velkost - pocet_k and stlpec <= velkost - pocet_k and all(
+ posun][stlpec + posun] == znak for posun in range(pocet_k)):
siet[riadok return True
if riadok <= velkost - pocet_k and stlpec >= pocet_k - 1 and all(
+ posun][stlpec - posun] == znak for posun in range(pocet_k)):
siet[riadok return True
return False
= vyhra_znak('R')
vyhra_r = vyhra_znak('B')
vyhra_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:
= siet
velkost, pocet_k, hracia_plocha = otoc_a_padni(hracia_plocha)
otocena_plocha = kontrola_vyhercu(otocena_plocha, pocet_k)
vysledok
vysledky.append(vysledok)return vysledky
= int(input())
pocet_pripadov = []
zoznam_sieti for _ in range(pocet_pripadov):
= map(int, input().split())
velkost, pocet_k = [input().strip() for _ in range(velkost)]
hracia_plocha
zoznam_sieti.append((velkost, pocet_k, hracia_plocha))
= riesenie_connect_k(zoznam_sieti)
vysledky print("\n".join(vysledky))
5:
def process_unicorns(tests):
= []
results for test in tests:
= sorted(set(test[1])) # Najskôr zoradíme unikátne kyslosti vzostupne
kyslosti
= len(kyslosti)
n = []
result for i in range(n // 2):
-(i + 1)]) # Najkyslejšia
result.append(kyslosti[# Najmenej kyslá
result.append(kyslosti[i])
if n % 2 == 1: # Ak je počet kyslostí nepárny, pridáme poslednú strednú hodnotu
// 2])
result.append(kyslosti[n
len(result), result))
results.append((
return results
# Vstup
= int(input())
J = []
tests
for _ in range(J):
= int(input())
n = list(map(int, input().split()))
kyslosti
tests.append((n, kyslosti))
# Spracovanie
= process_unicorns(tests)
results
# 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ť.