Ak nevieš programovať, nezúfaj! Môžeš sa to naučiť a ešte za to získať body, ktoré sa ti budú počítať namiesto tejto úlohy.
Stačí, že pôjdeš na stránku Programátorskej Liahni (liahen.ksp.sk). Keď budeš riešiť sadu conditions_cpp, bodmi, ktoré získaš si môžeš nahradiť riešenie tejto úlohy. Stačí ak na spodku tejto stránky odovzdáš pdf-ko s prezývkou, ktorú používaš na Liahni.
Ak máte akékoľvek otázky ohľadom tejto úlohy, napíšte Romanovi na [email protected]
Jozef sa pri raňajkách zahľadel na chladničku, na ktorej bolo množstvo magnetiek. Sestra Vendula je totiž ich nadšená zberateľka. Svoj prvý kúsok dostala od tety z Gruzínska, ktorá sa vracala z brigády na arašidových plantážach. Vendule sa vtedy magnetka zapáčila natoľko, že od rodiny a kamarátov už nechcela iné darčeky ako magnetky. Tento mesiac nimi konečne zaplnila celú chladničku. Teraz ale nevie, ako magnetky usporiadať.
Jozefa, dojedajúc svoje raňajky, napadlo, že by bolo zaujímavé vytvoriť z magnetiek na chladničke čo najviac rovnakých riadkov. Svoj nápad hneď povedal Vendule a tá bola nadšená. Teraz spolu rozmýšlajú koľko takýchto riadkov vedia vytvoriť. Ponáhľajú sa však do školy, a tak potrebujú pomoc!
Chladničku si pre jednoduchosť predstavme ako mriežku veľkosti \(n \times n\) a magnetky ako znaky +
, @
, atď. Potom mriežka môže vyzerať napríklad takto:
Všimnite si, že znaky v mriežke sa môžu opakovať – inak by sme nemohli vytvoriť rovnaké riadky. Pre mriežku vyššie vieme vytvoriť 3 rovnaké riadky, takže jedno z možných pekných usporiadaní je nasledovné:
Úloha
Každá mriežka veľkosti \(n \times n\) obsahuje \(n^2\) magnetiek, z ktorých sa ale niektoré môžu opakovať. Počet rôznych magnetiek si označíme \(r\). Na mriežke sa teda vyskytuje \(r\) typov magnetiek: \(t_1, t_2, ..., t_r\). Každý typ \(t_i\) sa môže na mriežke vyskytovať viackrát, takže počet výskytov typu \(t_i\) si označíme \(p_i\). Platí, že: \[p_1 + p_2 + ... + p_r = n^2\]
Napríklad mriežka vyššie obsahuje 5 rôznych symbolov, takže \(r = 5\). Takýto vstup by sa preto dal zapísať pomocou nasledovnej tabuľky:
\(i\) | \(t_i\) | \(p_i\) |
---|---|---|
1 | + |
3 |
2 | @ |
6 |
3 | % |
1 |
4 | & |
4 |
5 | # |
2 |
Variant A
Pre zadanú mriežku a jednotlivé počty magnetiek zistite, či sa dá vytvoriť aspoň \(47\) rovnakých riadkov.
Variant B
Na získanie plného počtu bodov stačí vyriešiť Variant B
Pre zadanú mriežku a jednotlivé počty magnetiek zistite, koľko najviac rovnakých riadkov je možné vytvoriť.
Formát vstupu
Na prvom riadku vstupu dostaneme dve celé čísla \(n\) a \(r\) – veľkosť mriežky \(n \times n\) a počet rôznych magnetiek, ktoré sa na mriežke nachádzajú.
Nasleduje riadok s \(r\) medzerou oddelenými číslami, pričom \(i\)-te číslo reprezentuje počet magnetiek \(p_i\) typu \(t_i\) na mriežke. Samotné typy magnetiek nás nezaujímajú, vieme že všetkých \(r\) je navzájom rôznych.
Pri riešení v jazyku C++
, Pascal
, Java
a podobných, si dávajte pozor na maximálne číslo, ktoré sú schopné celočíselné premenné uložiť. Počet magnetiek jedného typu môže v posledných dvoch sadách tieto limity prekročiť. Odporúčame preto použiť \(64\)-bitové premenné, v jazyku C++
preto namiesto typu int
použite typ long long int
.
Formát výstupu
Variant A
Na jediný riadok výstupu vypíšte ano
, ak sa v mriežke dá zostrojiť aspoň 47 rovnakých riadkov. V opačnom prípade vypíšte nie
.
Variant B
Na jediný riadok výstupu vypíšte koľko najviac rovnakých riadkov sa dá zostrojiť zo zadaných magnetiek.
Hodnotenie
Úloha síce obsahuje 2 varianty, ale odovzdávanie bude fungovať štandardne. K úlohe sme pripravili \(5\) sád vstupov. Za vyriešenie každej sady získate 3 body. Tieto sady sa líšia veľkosťou vstupných údajov.
Ak sa rozhodnete riešiť Variant A, vaše riešenie bude otestované na prvých \(2\) sadách a môžete tak získať \(6\) bodov. Pri riešení Variantu B bude odovzdaný program otestovaný na všetkých \(5\) sadách, takže môžete získať \(15\) bodov. Interne testovanie vašich riešení funguje jednoduchým pravidlom. Ak je výstupom vášho programu číslo, testovač sa k nemu správa ako k riešeniu Variantu B. V opačnom prípade ho označí za riešenie Variantu A.
V nasledujúcej tabuľke označuje \(n\) veľkosť mriežky a \(r\) počet rôznych magnetiek. Vo vstupných sadách platí:
Číslo sady | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
maximálne \(n\) | \(100\) | \(100\) | \(2\,000\) | \(50\,000\) | \(50\,000\) |
maximálne \(r\) | \(300\) | \(500\) | \(2\,000\) | \(60\,000\) | \(60\,000\) |
Príklady
Variant B
Input:
4 5
3 6 1 4 2
Output:
3
Ide o príklad z úvodu pre mriežku \(4 \times 4\). Najviac vieme vytvoriť 3 rovnaké riadky, napríklad tak, ako je ukázané na druhom obrázku.
Input:
6 6
12 8 4 7 3 2
Output:
4
Vieme vytvoriť najviac \(4\) rovnaké riadky. Môžeme napríklad použiť 8 magnetiek prvého typu, 8 druhého, 4 tretieho a 4 štvrtého.
Variant A
Uvádzame ešte pár príkladov pre Variant A. Prvé dva príklady sú rovnaké ako pri Variante B.
Input:
4 5
3 6 1 4 2
Output:
nie
Dajú sa vytvoriť najviac \(3\) rovnaké riadky, čo je menej ako 47, takže odpoveď je nie
.
Input:
6 6
12 8 4 7 3 2
Output:
nie
Opäť vieme vytvoriť iba 4 rovnaké riadky, čo je menej ako 47 a odpovedáme nie
.
Input:
60 6
537 690 108 395 193 1677
Output:
ano
V tomto príklade už vieme vytvoriť až \(57\) rovnakých riadkov, takže odpoveď je ano
.
Odovzdávanie
Na odovzdávanie sa musíš prihlásiť
Otázky a diskusia
Po skončení kola budete mať príležitosť na diskutovanie o riešeniach v diskusii pod vzorovým riešením.