Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

Az I. 429. feladat (2017. április)

I. 429. Egy edényben, melynek felszíne téglalap alakú, folyadék található. A folyadék felszínén \(\displaystyle N\) helyen (\(\displaystyle 1 \le N \le 50\)) szigeteket hozunk létre, melyek mindegyikére azonos számú inaktív baktériumot telepítünk. Az összesen \(\displaystyle K\) számú (\(\displaystyle 100\le K \le 10\,000\)) baktériumból minden szigetre \(\displaystyle \lfloor K/N\rfloor\) kerül. Az edény oldalhossza \(\displaystyle a\) és \(\displaystyle b\) egység (\(\displaystyle 50 \le a~\le b \le 500\)). A folyadék felszínére gondolatban az oldalakkal párhuzamosan egy négyzethálót fektetünk. Az így keletkező \(\displaystyle a\cdot b\) 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 \(\displaystyle s\)-edik sziget (\(\displaystyle 1\le s \le N\)) négyzete az egyik hosszabb oldaltól \(\displaystyle \lfloor a/2\rfloor\) és az egyik rövidebb oldaltól \(\displaystyle \big\lfloor s\cdot b/(N+1)\big\rfloor\) 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 \(\displaystyle T\) ideig (\(\displaystyle 10 \le T\le 100\)) 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 \(\displaystyle U\) számú (\(\displaystyle 4\le U\le 10\)) ú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

\(\displaystyle \qquad\circ\) átlép az egységnégyzetével oldalszomszédos, véletlenszerűen választott négyzetbe és életkora eggyel nő;

\(\displaystyle \qquad\circ\) ha egy sziget négyzetébe ért, akkor

\(\displaystyle \qquad\qquad\bullet\) ha életkora \(\displaystyle 4T/10\) és \(\displaystyle 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 \(\displaystyle U\) számú új, 0 életkorú aktív baktérium jön létre a sziget négyzetében;

\(\displaystyle \qquad\qquad\bullet\) 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;

\(\displaystyle \qquad\circ\) ha a baktérium életkora nagyobb, mint \(\displaystyle 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 \(\displaystyle 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 \(\displaystyle K\), \(\displaystyle U\), \(\displaystyle T\), \(\displaystyle a\) és \(\displaystyle b\) értékét, majd írja a standard output első sorába azon \(\displaystyle N\) értékeket, amelyeknél az összes baktérium aktiválódik. A szimulációt az adott paraméterekkel és minden lehetséges \(\displaystyle 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ó.

(10 pont)

A beküldési határidő 2017. május 10-én LEJÁRT.


Mintamegoldás C++ nyelven: i429mo.cpp


Statisztika:

2 dolgozat érkezett.
8 pontot kapott:1 versenyző.
6 pontot kapott:1 versenyző.

A KöMaL 2017. áprilisi informatika feladatai