ACM 1994

döntő



Betűszedés (F probléma)
Proporcionális betűk karakterenként eltérő méretű helyet igényelnek a nyomtatott sorban. Méretüket pontban adjuk meg, amely megadja, hogy mekkora helyet igényelnek az egyes karakterek. A feladatban be kell állítanod a megkapott bekezdéseket. Minden bekezdésben speciális szavak találhatók a betűtípus kiválasztására és a méret megadására.
Az input a betűtípusok (fontok) szélességének megadásával kezdődik. Ezek az adatok egy 10 pont nagyságú karakterek szélességét adják meg 6 különböző font esetében. Az első sor tartalmazza a tábla karaktereinek számát (0<=N <=100). A következő N sor mindegyike tartalmazza, hogy a különböző betűk 6 fonttípus esetén milyen szélesek. A szélesség mértékegysége tetszőleges, nevezzük unit-nak (egység). Minden 10 pontos karakter szélessége nagyobb, mint 0 és kisebb, mint 256 egység. A karakterek méretének nagyságával arányosan nő a szélességük is. Ha egy 10 pontos A betű 12 egység széles, akkor a 20 pontos A betű 24 egység széles.

A maradék sorok tartalmazzák a kiszedendő bekezdéseket. Minden bekezdés egy két egészet (L, W) tartalmazó sorral kezdődik. L megmutatja, hogy hány sorból áll a bekezdés, a W pedig a sorok szélességét határozza meg (egységben). A kezdőbetű, azaz minden bekezdés első betűje 10-es méretű. A fontokat 1-6-ig számozzuk, amely számozás a font-szélesség tábla sorszámának felel meg. Egy üres bekezdés (L=0) fogja jelezni az input adatok végét. Ezen üres bekezdéshez nem tartozik output.

A szavak legfeljebb 8 karakteresek (nem lehet bennük szóköz vagy tab) és szóközzel vannak elválasztva. A sor végén lévő szóközök nem számítanak, ellentétben a szavak közötti szóközzel, amelyek mindig 1 egység szélesek. Minden szó minden karaktere megtalálható a szélességtáblában.

Vannak speciális minták is a bekezdésben. "*f1", "*f2", "*f3", "*f4", "*f5", and "*f6" azt mutatja, hogy a következőkben melyik fontot kell használni. A "*sN", ahol N egy 1 és 99 között egész szám jelzi, hogy N pontos betűt kell használni a következő részben.
Ezek a speciális minták mindig egy szóközzel vannak elkülönítve a többi szótól és mintától. A stílus- és méretbeállítás csak az adott bekezdésre vonatkozik!

Minden sorban próbáld meg a lehetséges legtöbb szót elhelyezni, biztosítva, hogy minden szót követő szóköz mérete pontosan ugyanolyan méretű legyen, mint a megelőző szó karakterei, kivéve a sor utolsó szavát. Az utolsó szót követő szóköz nem foglal helyet.

Amikor egy fontot méretezünk, kerekítsünk. Például ha egy 10 pontos betű 9 egység széles, akkor a 15 pontos 14 egység széles legyen, hasonlóan a 16 pontoshoz. A 14 pontos viszont csak 13 egység széles.

Minden bekezdés előtt jelenítsük meg a sorszámot. Majd a kiszedett sorok előtt írjuk ki a sorszámot, az első és az utolsó szóval és a sor végén maradt üres hely méretével. Ez tölti ki a sort, ha a szavak és a közöttük lévő szóközök száma ezt megengedi. Ha egy szó szélessége meghaladja egy sor hosszát, akkor önmagában helyezzük el a sorban. A sor végén viszont negatív mérettel jelezzük, hogy mennyivel hosszabb, mint egy sor.

 
INPUT.TXT
4
A 10 20 30 12 22 32
B 1 2 3 4 5 6
C 9 10 8 3 5 2
  2 4 6 3 5 7
2 80
*f2  AAA BBB CCC
  ABC *s15 CBA AABC CACA
3 100
AAA
AAA BBB CCC
ABC CBA AABC CACA
0 0
OUTPUT.TXT
Paragraph 1
  Line 1: AAA ... BBB (10 whitespace)
  Line 2: CCC ... ABC (14 whitespace)
  Line 3: CBA ... CBA (32 whitespace)
  Line 4: AABC ... AABC (2 whitespace)
  Line 5: CACA (-10 whitespace)
Paragraph 2
  Line 1: AAA ... CCC (4 whitespace)
  Line 2: ABC ... AABC (26 whitespace)
  Line 3: CACA ... CACA (62 whitespace)


Tolószékfigyelés (H probléma)
Egy rehabilitációs intézetben a betegek motoros tolószékben közlekednek egy körülzárt területen. A kutatók azt szeretnék tanulmányozni, hogy ki mikor merre jár. A székek csak egyenesen tudnak haladni. A betegek meg tudják állítani a széket, így irányt is tudnak változtatni, de csak akkor, ha megálltak. A motoros tolószékek iránytűvel, órával és sebességmérővel vannak felszerelve. Ezek az eszközök segítik a betegek megfigyelését. Az iránytűben 0=észak, 90=kelet, 180=dél 270=nyugat.
 
 

Ismert a zárt terület térképe, ahol a betegek mozoghatnak. Ez egy 200 méter széles és 400 méter hosszú téglalap alakú terület. A betegek a terület déli oldalán léphetnek be egy ajtón keresztül, amely a 400 méter hosszú rész közepén van. A belépés pillanatában kezdődik a megfigyelés, a betegek mozgásának rögzítése. A rögzítés maximum 1 óráig történhet (0 -tól 3600 mp-ig) A rögzítő eszköz 4 számot rögzít. Az első két szám adja a rögzítés kezdő idejét és a végét. A 3. szám adja a sebességet. A 4. az iránytű mutatóját jelzi (például 45 fok esetén északkelet felé halad a beteg).

A 10.6 15.9 2.8 274 adatsor a 10.6 másodperc és a 15.9 másodperc közötti mozgást írja le, amely során 2.8 m/s sebességgel mozgott a 274 fokkal jelzett irányban.

A feladatod, hogy feldolgozd a mért adatokat. Válaszold meg az alábbi kérdéseket!

1) Elhagyta-e a beteg a zárt területet? Ha igen, határozd meg az időpontot, amikor kihajtott a területről és azt is, hogy pontosan hol történt az elhagyás. Ha a beteg nem ment ki a területről, akkor határozd meg az a legnagyobb távolságot, amelyet az ajtó és a legtávolabbi olyan pont között van, amelynél a beteg járt.
2) Mekkora távolságot tett meg a beteg?
A kérdés megválaszolásához egy olyan koordinátarendszert használj, melynek (0,0) pontja a terület délnyugati sarka, a (400,200) az északkeleti sarok. Amikor a beteg behajt a területre, az idő 0.0 és a (200,0) pontban van. A belépés után minden beteg észak felé kezd el haladni.

Bemenet

A bemeneti állományban szereplő adatsorok első sora egyetlen szám, amely megmutatja, hogy az adott adatsorban hány egyenes szakasz szerepel. Minden szakaszhoz 4 szám tartozik (lásd korábban). Az adatsorok végét egy 0 jelzi. A file neve input.txt, x tetszőleges karakter.
A példában a beteg 0.0-kor hajtott be a területre és az első 5 mp-ben észak felé hajtott 3 m/s sebességgel. A 7-9 másodperc között 2 m/s-sel 30 fok felé vette útját. Aztán megállt 60 fok felé indult 10-100 mp. között 4 m/s sebességgel. 10 másodperccel később észak felé indult 2 m/s-sel 200 másodpercig. (110-től)
Kimenet
Az output minden adatsornál az eset számával kezdődjön. Az outputban jelezni kell, hogy a beteg elhagyta-e a területet és ha igen, akkor mikor és hol? Ha nem, akkor a maximális távolságot, amely az ajtó és a beteg által elért pont között van. A formátum egyezzen meg a példában lévő formátummal. Az output file neve output.txt.
INPUT.TXT
4
0.0 5.0 3.0 0
7.0 9.0 2.0 30
10.0 100.0 4.0 60
110.0 200.0 2.0 0
3
0.0 20.0 2.0 0
500.0 600.0 1.0 270
3000.0 3100.0 1.0 0
7
0.0 5.3 2.1 0
19.8 35.6 2.7 346
42.0 78.4 2.3 15
1181.4 1192.1 1.7 117
2107.0 2193.6 2.1 295
2196.3 2201.2 2.0 298
2704.3 2709.2 1.5 208
0
OUTPUT.TXT
Case Number 1
Left restricted area at point (400.0,132.8) and time 67.2 sec.
Total distance traveled was 559.0 feet
***************************************
Case Number 2
No departure from restricted area
Maximum distance patient traveled from door was 172.0 feet
Total distance traveled was 240.0 feet
***************************************
Case Number 3
Left restricted area at point (67.0,200.0) and time 2191.4 sec.
Total distance traveled was 354.7 feet
***************************************

Megszorítások:

  1. Minden adatsor elemei időrendi sorrendben vannak. A 0.0 időpillanat az ellenőrzött területre való belépés ideje.
  2. A sebesség 0.0 és 9.9 m/s között lehet.
  3. Az iránytű által mutatott érték 0 és 359 fok között van. A belépéskor 0 az értéke.
  4. Az egy sorba kerülő adatokat legalább 1 szóköz választja el egymástól.
  5. Minden számadatot 1 tizedesre kerekítve kell megjeleníteni.
  6. Ha a páciens elhagyja az ellenőrzött területet, a helyét negatív koordináták is jelölhetik. (Nem kell tartanod attól, hogy a tolószék falnak ütközik.)