Feladat: I.429 Korcsoport: - Nehézségi fok: -
Füzet: 2017/április, 230 - 231. oldal  PDF  |  MathML 
Témakör(ök): Feladat, Programozás, algoritmusok

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

Egy edényben, melynek felszíne téglalap alakú, folyadék található. A folyadék felszínén N helyen (1N50) szigeteket hozunk létre, melyek mindegyikére azonos számú inaktív baktériumot telepítünk. Az összesen K számú (100K10000) baktériumból minden szigetre K/N kerül. Az edény oldalhossza a és b egység (50ab500). A folyadék felszínére gondolatban az oldalakkal párhuzamosan egy négyzethálót fektetünk. Az így keletkező ab darab egységnégyzet bármelyike pontosan egy szigetet, vagy a folyadék szabad felszínét fedi le. Mindkét fajta egységnégyzet tetszőleges számú baktériumot tartalmazhat. Az s-edik sziget (1sN) négyzete az egyik hosszabb oldaltól a/2 és az egyik rövidebb oldaltól sb/(N+1) távolságra van (tehát a szigetek a rövidebb oldal felezőmerőlegeséhez közel, az oldaltól és egymástól nagyjából egyenlő távolságban vannak).
A szigeteken lévő inaktív baktériumok korlátlan ideig a szigetükön maradnak. A folyadék belsejében elhelyezünk 0 életkorú aktív baktériumokat is, melyek legföljebb T ideig (10T100) véletlenszerűen mozognak a folyadék felszínén, az edény belsejében, majd elpusztulnak. Ha egy aktív baktérium életének egy bizonyos időszakában ismét egy szigetre érkezik, ahol van inaktív baktérium, akkor az aktív és az egyik inaktív baktérium elpusztul, és kettőjük helyett összesen U számú (4U10) új, aktív baktérium jön létre.
A baktériumokat kutató tudósok nem tudják megállapítani, hogy egy edényben hány szigetet hozzanak létre, hogy az összes baktérium meghatározott időn belül aktiválódjon. Készítsünk szimulációs programot, amely modellezi a jelenséget, és megadja, hogy adott paraméterek mellett hány szigetet érdemes létrehozni. A szimuláció minden lépése egység ideig tartson, és a következők történjenek:
minden aktív baktérium
átlép az egységnégyzetével oldalszomszédos, véletlenszerűen választott négyzetbe és életkora eggyel nő;
ha egy sziget négyzetébe ért, akkor
ha életkora 4T/10 és 6T/10 közötti, és a szigeten van inaktív baktérium, akkor az aktív és az egyik inaktív baktérium elpusztul, és helyettük U számú új, 0 életkorú aktív baktérium jön létre a sziget négyzetében;
ha életkora nem a fenti értékek között van, akkor nem történik semmi, a következő szimulációs periódusban folytatja bolyongását;

ha a baktérium életkora nagyobb, mint T, akkor elpusztul.

Az aktív baktériumok egymással történő találkozásakor nem történik semmi. A szimuláció kezdetekor elhelyezzük a szigeteket az inaktív baktériumokkal, és beteszünk az edénybe az egyik szélső szigetre 50 darab, 0 életkorú aktív baktériumot. A szimuláció legföljebb 10 000 időegységig tartson, vagy amíg van az edényben aktív baktérium.
A program olvassa be a standard input első sorából K, U, T, a és b értékét, majd írja a standard output első sorába azon N értékeket, amelyeknél az összes baktérium aktiválódik. A szimulációt az adott paraméterekkel és minden lehetséges N-nel legalább 100-szor futtassuk le.
Beküldendő egy tömörített i429.zip állományban a program forráskódja (az .exe és más, a fordító által generált állományok nélkül), valamint a program rövid dokumentációja, amely leírja a megoldás menetét és megadja, hogy a forrás mely fejlesztői környezetben fordítható.