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/S. 17. feladat (2017. április)

I/S. 17. Julcsi és Marcsi egy szabályos dobókockával (a szemközti oldalakon levő pontok összege mindig 7) játszanak egy \(\displaystyle S\cdot O\) cellából álló négyzetrácson. A négyzetrács egy cellája pontosan akkora, mint a dobókocka egy oldallapja. A rács bal felső cellájára teszik le a dobókockát úgy, hogy az oldalai párhuzamosak a rács oldalaival, felfele az egyes szám, a tőle jobbra levő oldalon a hármas, a tőle lefele levő cella felé pedig a kettes néz.

Jobbra végiggörgetik a kockát a rácson, míg el nem éri az utolsó cellát, ekkor lefelé gördítik a következő sorba, majd balra vissza addig, míg el nem érik a bal oldalát a rácsnak. Itt újra lefelé gördítenek rajta egyet, s ezeket a lépéseket ismétlik mindaddig, míg az összes cellát be nem járta a kocka. Minden lépés után megnézik, hogy hányas szám van a kocka tetején, és az így megnézett számokat összeadják. Mennyi lesz az összeg?

A bemenet egyetlen sorában két pozitív egész szám áll, \(\displaystyle S\) és \(\displaystyle O\) (\(\displaystyle 1 \le S, O \le 100\,000\)), a négyzetrács sorainak és oszlopainak a száma. A kimenet első és egyetlen sora a kapott összeget tartalmazza.

Az első 4 tesztesetben (4 pontért) \(\displaystyle 1 \le S, O \le 100\).

Példa:

BemenetekKimenetek
3 219
3 442
737 296763532

Beküldendő egy tömörített is17.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ó.

Megjegyzés: Megoldható-e a feladat akkor is, ha nincs korlát \(\displaystyle S\)-re és \(\displaystyle O\)-ra, csak annyit tudunk, hogy a megoldás \(\displaystyle 10^{18}\)-nál kisebb?

(10 pont)

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


A feladat megoldásához egy könnyen implementálható modellt kell találnunk a kocka tárolására, illetve a gördítés műveletek megvalósítására.

Sok jó választás lehet, a minta megoldás két 4-elemű tömböt használ; az egyik a felső-bal-alsó-jobb, a másik pedig a felső-első-alsó-hátsó oldalakat tárolja. Ekkor a gördítés az egyik tömb ciklikus forgatását (vagyis az 1-5-6-2 tömb 2-1-5-6 lesz a forgatás után), illetve a másik tömb 0. és 2. elemeinek frissítését foglalja magában.

Ezzel megoldható volt a részfeladat:

5 pontos minta megoldás (c++)

A teljes megoldáshoz azt kellett még észrevenni, hogy a kockának csak 24 (vagyis véges számú) pozíciója van, ezért egy idő után amikor egy sor elején jobbra indulunk, ugyanazokon a pozíciókon fogunk végigmenni, mint az indulásnál. Ez azt is jelenti, hogy ha egy \(\displaystyle x\) sor hosszú minta ismétlődik, ahol minden iterációval az összeg \(\displaystyle y\)-nal nő, akkor az első \(\displaystyle S - (S \mod x)\) sorban összesen \(\displaystyle S \div x\) alkalommal adunk \(\displaystyle y\)-t az összeghez, vagyis a teljes összeg \(\displaystyle (S \div x) \cdot y + M\) lesz, ahol \(\displaystyle M\) az utolsó \(\displaystyle S \mod x\) sorban elért összeg. Mivel 24 féle pozíciót vehet fel a kocka, ezért ez konstans számú sort jelent, így ez a megoldás a sorok számában konstans \(\displaystyle O(O)\).

Teljes minta megoldás (c++)

Megjegyzés: amennyiben az összeget tudjuk tárolni, a minta egy-egy soron belül is ismétlődik, így a feladat \(\displaystyle O(1)\) időben is megoldható, bár ez nem volt szükséges a 10 pont megszerzéséhez.


Statisztika:

12 dolgozat érkezett.
10 pontot kapott:Busa 423 Máté, Gáspár Attila, Janzer Orsolya Lili, Kiss Gergely, Molnár Bálint, Nagy Nándor, Németh 123 Balázs, Noszály Áron, Szakály Marcell.
7 pontot kapott:1 versenyző.
6 pontot kapott:1 versenyző.
5 pontot kapott:1 versenyző.

A KöMaL 2017. áprilisi informatika feladatai