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 S. 112. feladat (2016. december)

S. 112. Egy város úthálózata párhuzamos sugárutakból és ezekre merőleges, egymással párhuzamos utcákból áll. A szomszédos utcák távolsága 100 méter, ahogyan a szomszédos sugárutaké is. Az egyszerűség kedvéért az utcákat sorban 1-től \(\displaystyle N\)-ig, míg a sugárutakat szintén sorban 1-től \(\displaystyle M\)-ig megszámozták. A városban nagy problémát jelent, hogy nincs tűzoltóság, így a városvezetés elhatározta, hogy épít egy tűzoltó központot. A központ épületének tervei már el is készültek, így tudjuk, hogy a tűzoltóautók az egyik útkereszteződésnél fognak kihajtani. A városban a tűzoltást tűzcsapok segítik, melyeket \(\displaystyle K\) darab kijelölt kereszteződésbe el is helyeztek. Minden tűzcsapnak tudjuk a helyét, illetve azt, hogy mennyire gyakori az, hogy a közelében tűz üt ki (\(\displaystyle p_{i}\) egész szám a tűz gyakoriságát jelöli az \(\displaystyle i\)-edik kereszteződés közelében). Ha tűz üt ki valahol, akkor a tűzoltóautók állandó sebességgel rögtön elindulnak a megfelelő tűzcsaphoz, csak utcákat és sugárutakat használva, a lehető legrövidebb úton. Úgy szeretnék kiválasztani a központ helyét, hogy a tűzesetekre való kiérkezési idő várható értéke minimális legyen. Ez akkor teljesül, ha \(\displaystyle \sum_1^K p_{i}\cdot d_{i}\) minimális, ahol \(\displaystyle d_{i}\) az \(\displaystyle i\)-edik tűzcsap és a központ távolsága. Készítsünk programot, amely megadja a legkedvezőbb útkereszteződés helyét.

A standard bemenet első sora az utcák \(\displaystyle N\) számát és a sugárutak \(\displaystyle M\) számát, illetve a tűzcsapok \(\displaystyle K\) számát tartalmazza. Az ezután következő \(\displaystyle K\) sor egy-egy tűzcsap pozícióját, illetve a tűz gyakoriságát írja le; minden sor három egész számot tartalmaz: az első az utca, a második a sugárút száma, a harmadik a gyakoriság.

A standard kimenet első és egyetlen sorába a tűzoltóság tervezett helye kerüljön, vagyis két egész szám jelölje a kihajtó helyét: az első az utca, a második a sugárút sorszámát. Több megoldás esetén bármelyik megadható.

Korlátok: \(\displaystyle 1\le N,M\le 10^{9}\), \(\displaystyle 1\le K\le 10^{5}\), \(\displaystyle 1\le p_{i}\le 100\). Időlimit: 0,1 mp. Memórialimit: 256 MB. A verem (stack) méretére nincs külön korlát, de a teljes memórialimitbe számít bele.

Az ábra a mintát tartalmazza, a körök a tűzcsapok, az \(\displaystyle X\) a tűzoltóság optimális helye.

Pontozás és korlátok: a programhoz mellékelt, a helyes megoldás elvét tömören, de érthetően leíró dokumentáció 1 pontot ér. A programra akkor kapható meg a további 9 pont, ha bármilyen hibátlan bemenetet képes megoldani a fenti korlátoknak megfelelően.

Beküldendő egy tömörített s112.zip állományban a program forráskódja és rövid dokumentációja, amely megadja, hogy a forrásállomány melyik fejlesztői környezetben fordítható.

(10 pont)

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


A sugárutak egymásra merőlegesek, az egész várost elhelyezhetjük egy koordinátarendszerben és tekinthetünk rá úgy, mint pontok halmazára. A tűzoltóautó a városban a sugárutak mentén tud haladni, így az összes ponttól vett súlyozott Manhattan-távolságot szeretnénk minimalizálni. (Két pont Manhattan-távolsága a megfelelő koordinátáik különbségének összege: \(\displaystyle M=|x1-x2|+|y1-y2|\) ).

A képletből látszik, hogy a minimumszámolást megtehetjük külön-külön az \(\displaystyle x\) és az \(\displaystyle y\) koordinátákra. A tűzoltóállomás oszlopában és sorában is kell lennie tűzcsapnak, különben a sor/oszlop mozgatásával csökkenthető lenne a minimum, azaz csak az előforduló \(\displaystyle x\) illetve \(\displaystyle y\) koordinátákra kell kiszámolni a koordináták súlyozott mediánját.

Az algoritmusunk komplexitása \(\displaystyle O(K*log(K))\) a rendezés miatt, memóriaigénye O(K).

Megoldás: Busa Máté kódja main.cpp


Statisztika:

16 dolgozat érkezett.
10 pontot kapott:Busa 423 Máté, Csenger Géza, Gáspár Attila, Janzer Orsolya Lili, Kiss Gergely, Molnár Bálint, Németh 123 Balázs.
9 pontot kapott:Tóth 827 Balázs.
8 pontot kapott:2 versenyző.
7 pontot kapott:1 versenyző.
5 pontot kapott:1 versenyző.
4 pontot kapott:1 versenyző.
2 pontot kapott:2 versenyző.
0 pontot kapott:1 versenyző.

A KöMaL 2016. decemberi informatika feladatai