Zoznam úloh

1. Prvá úloha

Zadanie

Vedúci sedia v T21, nič nerobia a zrazu si spomenú, že možno by chcelo aj zverejniť nové úlohy do KSP.

„Nejak sme zabudli na prvú úlohu, mali by sme s tým niečo spraviť“, povedal Stanko.

„No dobre, tak ja rýchlo spravím vstupy a vy si napíšte zadanie, to sa mi robiť nechce“, hovorí Andrej.

„Joooj ja by som to zadanie možno spravil, ale nemám pri sebe počítač, budem vám to zadanie diktovať a niekto ho prosím píšte“, sťažuje sa Miško.

Úloha

Miestnosť, v ktorej sú vedúci, má tvar obdĺžnika s $n$ riadkami a $m$ stĺpcami, teda dokopy $n \cdot m$ políčok. Počítač, na ktorom sa dá písať zadanie prvej úlohy do KSP, sa nachádza v riadku $a$ a stĺpci $b$. Ako ste mohli vidieť, tak vedúcim sa zadanie písať nechce, takže chcú byť od počítača čo najďalej. Kam sa majú vedúci postaviť?

Vzdialenosť medzi 2 políčkami počítame ako minimálny počet políčok, cez ktoré máme prejsť, aby sme sa dostali z jedného na druhé s tým, že sa vieme posúvať iba na hranou susediace políčka (Manhattanská vzdialenosť).

Formát vstupu

V prvom riadku vstupu sú rozmery miestnosti, teda čísla $n$ a $m$ ($1 \leq n,m \leq 10^6$) oddelené medzerou.

V druhom riadku vstupu je pozícia počítača, teda 2 čísla $a$ ($1 \leq a \leq n$) a $b$ ($1 \leq b \leq m$).

Sada 1 2 3 4
$1 \leq n \leq$ $1$ $10^6$ $10^6$ $10^6$
$1 \leq m \leq$ $10^6$ $10^6$ $10^6$ $10^6$
$1 \leq n \cdot m \leq$ $10^6$ $10^6$ $10^{12}$ $10^{12}$

Navyše je garantované, že v 3. sade je miestnosť tvaru štvorca, teda $n = m$.

Formát výstupu

Vypíš jeden riadok a v ňom pozíciu vedúcich, teda 2 čísla oddelené medzerou - riadok a stĺpec.

Je garantované, že vždy je takáto pozícia práve 1, riešenie je teda vždy jednoznačné.

Príklady

Vstup

1 2
1 1

Výstup

1 2

Vieme byť buď hneď pri počítači, čo nechceme, alebo pôjdeme na druhé políčko a budeme vzdialený 1 od počítača

.X

Vstup

3 4
1 2

Výstup

3 4

Najviac sa nám oplatí byť v pravom dolnom rohu - budeme potom vzdialený 4 políčka od počítača

.X..
....
....

  1. Epická miestnosť na matfyze, kde sídli KSP 

Riešenie hrubou silou

Priamočiare riešenie, ktoré sa ponúka, je vyskúšať všetky políčka. Pre každé políčko vieme spočítať vzdialenosť, držať si doteraz najvzdialenejšie políčko, ktoré na konci vrátime. To je ale pomalé, presnejšie $O(nm)$ pomalé. Nešlo by to rýchlejšie?

Zaujímavá myšlienka

Otázka je, či vlastne naozaj potrebujeme vyskúšať všetky políčka. Rozdeľme si miestnosť na polovicu na výšku aj na šírku.

Pozrime sa na úlohu najskôr v jednom rozmere, tj. miestnosť je veľkosti $1 \cdot m$ (t. j. dlhý slíž), a predpokladajme zatiaľ, že $m$ je párne. Následne si tento slíž rozdeľme na dve polovice. Vidíme, že akonáhle je počítač v ľavej polovici, tak najďalej vieme byť na políčku najviac vpravo a opačne. Ak by sme chceli maximalizovať iba rozdiel tejto súradnice, tak nech je počítač v hocijakom riadku, my chceme ísť do opačnej polovice na kraj.

Rovnakú úvahu vieme spraviť aj pre miestnosť veľkosti $n \cdot 1$ - ak je počítač v hornej polovici, ja chcem byť v dolnej polovici a opačne.

Optimálne riešenie

Manhattanská vzdialenosť je súčet dvoch rozdielov - súradníc riadkov a súradníc stĺpcov, a tú chceme maximalizovať. Ak aplikujeme predošlú úvahu, tak vidíme, že chceme maximalizovať tieto rozdiely po zložkách, čo docielime tým, že ideme do opačných polovíc ako počítač. To nám teda dáva 4 možnosti - ak je počítač v ľavej hornej štvrtine, tak, keďže počítač je hore, tak my chceme byť v spodnom riadku, a keďže je v ľavej polovici, tak chceme byť v najpravejšom stĺpci. To spolu dáva výsledné políčko - pravý dolný roh. Rovnaká úvaha sa dá použiť pre zvyšné 3 možnosti - vrátime roh najďalej od počítača, v tomto prípade políčko $(n,m)$.

Program najskôr načíta súradnice $m$, $n$ a súradnice počítača. To, či sme v pravej/ľavej polovici nám určí súradnica počítača určujúca stĺpec. Ak je $\leq \frac{m}{2}$ (pri počítaní súradníc od $(1,1)$ ako ľavý horný roh), tak počítač je v ľavej polovici, inak je v pravej. Obdobne horná/dolná polovica, len s $n$.

Pozorný čitateľ si isto už všimol, že pri nepárnom $n$ alebo $m$ môžeme skončiť presne v strede medzi polovicami. Vtedy by sme mali dve možnosti, v zadaní ale máme garantované, že riešenie je jednoznačné a tento prípad nemôže nastať.

Ešte rýchle slovíčko k zložitostiam:

Časová zložitosť je $O(1)$, nakoľko načítanie vstupu je konštatne rýchle, vyhodnotenie polovíc a následného výsledku takisto. Pamäťová zložitosť je tiež $O(1)$, nakoľko si pamätáme iba $m$, $n$ a súradnice počítača.

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

Korešpondenčný seminár z programovania zastrešuje občianske združenie Trojsten.

Kontakt
Ďalšie projekty