C1 - PokerČasový limit: 10s, Pamäťový limit: 64MiBProgramovacie jazyky: Pascal, C, C++, Java, C++0x, Python 3.4, Python 3.11Počet bodov: 1 [ Pošli riešenie ] [ Tvoje riešenia ] [ Správne riešenia ] [ Vzorové riešenie ] Vašou úlohou dnes bude napísať program, ktorý pomôže Jankovi vyhrať veľa peňazí v hre poker. Poker, konkrétne teda jeho variant hold'em, sa hrá tak, že každému hráčovi sa rozdajú 2 karty (tieto ostatní hráči nevidia) a na stôl sa vyloží ďalších 5 kariet, ktoré vidia všetci hráči. Každý hráč si zo všetkých 7 kariet, ktoré vidí (teda dvoch svojich a piatich spoločných) zvolí 5 kariet tak, aby zvolená pätica mala čo najväčšiu hodnotu. Vyhráva (a všetky peniaze si berie) hráč, ktorého pätica má najväčšiu hodnotu. Hrá sa so štandardnými „medzinárodnými“ kartami štyroch farieb – ♥ srdcia (hearts), ♠ piky (spades), ♣ trefy (clubs) a ♦ kára (diamonds) – po trinásť hodnôt – v poradí od najhodnotnejšej po najmenej hodnotnú A, K, Q, J, T (10), 9, 8, 7, 6, 5, 4, 3, 2. V pokri hodnota karty nezávisí od farby, teda existujú karty rovnakých hodnôt a môže dôjsť aj k remíze medzi dvoma alebo viacerými hráčmi. „Pokrové ruky“, teda pätice kariet, sú v poradí od najhodnotnejšej po najmenej hodnotnú:
Vo všetkých prípadoch môže dôjsť k remíze, ak žiadne z uvedených kritérií nerozhodne o víťazovi. ÚlohaDaný je počet hráčov, hodnoty a farby dvoch kariet, ktoré dostal Janko a piatich spoločných kariet. Vašou úlohou je vypočítať pravdepodobnosť, že Janko toto kolo vyhrá (teda prehry ani remízy nepočítajte).VstupPrvý riadok vstupu obsahuje dve celé čísla K a T (T ≤ 20). Číslo K určuje počet hráčov (rovnaký pre všetky vstupné sady) a číslo T určuje počet vstupných sád. Nasledujúcich T riadkov obsahuje označenia 7 kariet oddelené medzerami, pričom prvé dve karty sú Jankove tajné a ďalších 5 je spoločných. Označenie karty je tvorené dvoma znakmi, prvý reprezentuje jej hodnotu (A, K, Q, J, T, 9, 8, 7, 6, 5, 4, 3, 2) a druhý reprezentuje jej farbu (C, D, H, S).VýstupPre každú sadu zo vstupu vypíšte pravdepodobnosť, že Janko vyhrá. Výsledok uveďte s presnosťou na maximálne osem desatiných miest. Akceptované budú len riešenia, ktorých výsledok sa od správneho výsledku líši najviac o hodnotu 0,001.C1K = 2C22 ≤ K ≤ 4PríkladVstup:2 3 AS AH AC 5C 3C 2C 4C AS AH AC 6C 3C 2D 4C AS AH AC 6H 3C 2D 4S Výstup:0 0.53333333 0.82828283 Vysvetlenie:V prvom prípade spoločné karty tvoria straight flush s najvyššou kartou 5, Jankove dve esá teda vôbec nie sú súčasťou najlepšej pätice, ktorú si môže zvoliť. Päť spoločných kariet si však môže zvoliť aj druhý hráč, a teda Janko môže prinajlepšom remízovať (môže dokonca prehrať, napríklad ak by jeho súper mal 6C, a teda si zvolil päticu 2C 3C 4C 5C 6C). V druhom prípade Janko má tri esá. Jeho súper môže vyhrať, ak by mal ľubovoľnú kartu 5, a teda získal postupku, alebo ak by mal ľubovoľnú trefovú kartu a teda flush. (Jankov súper nemôže mať tri esá, keďže tieto sú dokopy len štyri a dve z nich má Janko na ruke.) V poslednom prípade Janko má opäť tri esá, narozdiel od druhého prípadu sa ale zo spoločných kariet a žiadnych dvoch ďalších kariet nedá poskladať flush. Jankov súper teda vyhrá len v prípade, že bude mať na ruke ľubovoľnú kartu 5, a teda postupku. |