• Nem Talált Eredményt

III. forduló 1994

In document Számítástechnikai versenyek (Pldal 72-75)

2. Nemes Tihamér verseny korcsoport

2.11. III. forduló 1994

Versenyfeladat (Nemes Tihamér 1994, III. forduló 2. korcsoport 2. feladat).

Pista barátunkat kinevezték egy turistaház igazgatójává. Feladata az, hogy az érkező csoportokat beossza a turistaház szobáiba. Az elosztás során természetesen figyelembe kell vennie a szobák befogadóképességét és a turisták igényeit. Segítsünk barátunknak, írjunk programot! Programunk legyen olyan, hogy szabadon meg lehessen adni, hogy a lehetséges feltételek, megszorítások közül melyeket követeljük meg!

Ennek megfelelően a program elején egy egyszerű menüből lehessen kiválasztani, hogy az alábbi feladatok közül melyiket akarjuk megoldani! (2 pont)

1.

Megadott számú szobánk van, és mindegyiknek ismerjük a maximális befogadóképességét.

Tudjuk ezen kívül azt, hogy hány kiránduló érkezik. (A kirándulókat és a szobákat

Mint 2., de a turistáknak lehetnek különleges kívánságaik is, azaz megmondhatják, hogy az adott párnak ugyanabban a szobában kell laknia. (14 pont)

4.

Mint 3., de a turisták azt is megmondhatják, hogy csak olyannal kerülhessenek egy szobába, akiket felsoroltak, s a szobájukba mást ne tegyenek. (Ebben az esetben eltekinthetünk attól, hogy esetleg különböző neműek. Például házaspár, család stb.) (13 pont)

Az 1. részfeladatban legfeljebb 1, a 2.-ban és a 3.-ban pedig legfeljebb 2 olyan szoba legyen, ami nincs teljesen feltöltve turistákkal, a 4. részfeladatban ezenkívül az egy szobába teendők mellett a lehető legkevesebb feltöltetlen hely maradjon!

A program bemenő adatait két szöveges állomány, a SZOBAx.TXT illetve a TURISTAx.TXT írja le. Az első értelemszerűen a rendelkezésre álló szobák adatait, míg a második a turistákról ismert információt tartalmazza. Az állomány nevében szereplő x egy 0 és 9 közötti tetszőleges számjegy lehet – az egy teszthez tartozó állományokat ez azonosítja.

A SZOBAx.TXT állomány formátuma:

Az állomány első sora megadja, hogy hány szoba van a turistaszállóban (maximum 10).

Ezután minden sor egy-egy szoba befogadóképességét írja le. (A szobák sorszámozása az állománybeli sorrend szerint történik.)

A TURISTAx.TXT állomány formátuma:

Az állomány első sora megadja, hogy hány turistáról van szó. A második sor a lányok számát tartalmazza. A lányok megegyezés szerint a kisebb sorszámokat kapják, azaz ha pl. 8 turista érkezik, és ebből kettő lány, akkor őket L1-gyel és L2-vel jelöljük, míg a fiúkat a következők szerint: F3, F4, F5, F6, F7, F8. Ezt egy olyan sor követi, mely azoknak a pároknak a számát tartalmazza, akiket egy szobában kell elhelyezni. Ezt a megfelelő számú, párokat tartalmazó sor követi. A példában a 3. szeretne egy szobában lakni az 5.-kel.

Példa:

Végül az olyan csoportok száma következik, akik nem engednek maguk közé idegeneket, amit soronként követ az egyes csoportok leírása. A csoportok leírása egy darabszámmal kezdődik, majd szóközökkel elválasztva a csoportba tartozó személyek sorszámaival folytatódik. A példában az 1., a 7. és a 8. lehet például egy család, akik nem akarnak másokkal osztozni a szobájukon. állomány minden sora egy szobát írjon le, az alábbiak szerint:

szobaszám: turista turista turista

Az állománynak a szobasorszámok szerint rendezettnek kell lennie. Amennyiben a feladat nem oldható meg, úgy az állomány egyetlen sort tartalmazzon, melyben a következő üzenet legyen olvasható: NINCS MEGOLDAS.

====== Feladat vége ======

Vegyük észre, hogy az első részfeladat sem megoldható, ha a turisták száma meghaladja a szobák össz-befogadóképességét! Ez a két feladat csak mennyiségekről szól: a szobák kapacitásáról és turisták számáról.

Az első feladat megoldhatóságánál a második megoldhatósági problémája azonban jóval összetettebb. Mindegy, kiknek az elhelyezésével kezdjük, valószínűleg maradnak még emberek, akik egy egész szobát le fognak foglalni. De ha nem sorban töltjük fel a szobákat, ügyes szobaválasztással akár maradék nélkül is megoldhatjuk a fiúk vagy lányok elhelyezését. A szobaválasztás során koncentrálhatunk mondjuk a lányokra, ekkor a fiúk kapják a maradék szobákat. A szobák számának előismerete hiányában univerzális „minden variációt kipróbáló”

algoritmusra van szükségünk, melyhez a visszalépéses keresés tűnik ideálisnak, bár az életkorilag elég erős elvárás. Ennek hiányában szóba kerülhet a Monte-Carlo-módszer is, de ott a „megoldhatatlan” állítás csak valószínűsíthető.

A brute-force most is segíthet rajtunk a szobaválasztásnál. Bár most nem tudjuk az egymásba ágyazott ciklusokat megírni előre, jelen esetben csak a szoba kiválasztva igen/nem közül kell választanunk. A kettes számrendszerbeli 0/1 állapotok segíthetnek. Amennyiben N szobánk van, úgy lehetőség áll előttünk a lányok elhelyezésére. Vegyük sorra a számokat, mindegyiket képzeljük el 2-es számrendszerben. Ekkor (4 szoba esetén) 4 számjegyű 0000 ... 1111 kettes számrendszerbeli számokról beszélünk. Ha az i. pozíción 0 szerepel, akkor az i. szobát nem választjuk ki a lányoknak (oda nem kerülnek elszállásolásra), 1 esetén övék a szoba. Ekkor minden esetet sorra tudunk venni. Természetesen ezen esetek közül több is lesz majd, amely nem jó, pl. mindjárt az első 0000 eset egyik szobát sem adja oda a lányoknak (ami csak akkor lehet megfelelő, ha nincs lány a csoportban), míg az 1111 minden szobát a lányoknak ad.

Ez a módszer egyszerűen és gyorsan helyettesítheti a visszalépéses keresést, egy egyszerű for ciklussal és egy számrendszerbeli átalakítóval kiváltható. De vegyük észre (amit a visszalépéses keresés jól tudna), hogy nagyobb N esetén ez a folyamat az exponenciális növekedés miatt kivárhatatlan ideig fog tartani!

A második feladat annyival bonyolultabb, hogy a párokat kell először elhelyezni, és nekik jó szobát kell találni.

Nem egyértelmű a feladat, de feltételezhetjük, hogy több pár is kerülhet ugyanabba a szobába. Nem tér ki rá a feladat, de ha a párok egyik fele fiú, a másik lány, akkor a feladat máris megoldhatatlan? Ha ez nem teljesül, még mindig figyelni kell arra, hogy a fiú párokat a lány párokkal ne rakjuk össze.

A harmadik feladat még bonyolultabb. A kizárólagosság azt is jelenti, hogy a párok kezdeti elhelyezése után minden egyes ember elhelyezését meg kell fontolni. Az elhelyezés tagadása (más nem kerülhet be) sajnos nem a

lehetőségeket csökkenti, hanem éppen növeli. Ennek hiányában a következő lányt/fiút a következő szabad helyre (szobába) lehetne rakni, így azonban több olyan szoba is szóba jöhet, ahol esetleg befogadnák. Mivel az optimális feltöltés is fontos lehet a megoldhatóság miatt, a sok helyre elfogadható emberek kincset érhetnek.

Persze ez az utolsó változat már majdnem ekvivalens az órarendkészítési problémával, ahol bizonyos órák nem kerülhetnek egy időbe, mert pl. ugyanazon tanár tartja más-más csoportnak. Ott azonban sok optimalizálási szempont van (legyen tömör a diákok és a tanárok szempontjából is, ha lehet, ne legyen 7. óra, esetleg termek egymástól távolsága is legyen kordában tartva, stb.). Itt csak egyetlen optimalizálási szempont van: férjenek el.

In document Számítástechnikai versenyek (Pldal 72-75)