Avio Algoritam
시간 제한1초메모리 제한1024 MB
정해진 항공기 좌석 배정 우선순위 규칙에 따라 n명의 승객에게 좌석을 하나씩 배정하고 최종 객실 배치를 출력한다.
문제
Naše nacionalno blago, Croatia Airlines, ulaže milijarde eura u sofisticirani algoritam koji će dodijeliti bolja zrakoplovna sjedala onim putnicima koji su ranije kupili kartu.
Sjedala se u zrakoplovu protežu kroz redova, gdje je paran broj. Također postoje tri izlazna reda koji služe kao pristup izlazima u slučaju nužde, te ne sadrže sjedala. Prvi izlazni red nalazi se na samom početku zrakoplova (prije prvog reda sjedala), drugi se nalazi točno u sredini zrakoplova, a treći se nalazi na kraju zrakoplova (nakon posljednjeg reda sjedala). Redovi zrakoplova numerirani su prirodnim brojevima od do koji rastu od početka prema kraju zrakoplova. Odnosno, redovi numerirani brojevima , i su izlazni redovi, dok svi ostali redovi sadrže sjedala.
Konfiguracija sjedala u zrakoplovu je 3-3-3, odnosno svaki red sjedala sastoji se od tri grupe po tri sjedala između kojih se nalazi prolaz za putnike. Sjedala svakog retka označena su uzastopnim slovima prema sljedećem uzorku ABC.DEF.GHI slijeva nadesno.
Kada putnik kupi avionsku kartu, sofisticirani mu algoritam dodijeli sjedalo prema sljedećim pravilima:
-
Ako postoji prazno sjedalo u redu koji se nalazi direktno iza nekog izlaznog reda, svi se ostali redovi (za koje ne vrijedi ovo svojstvo) ignoriraju u idućem pravilu.
-
Najprije se odabire red s najvećim brojem praznih sjedala. Ako postoji više takvih redova, odabire se onaj red koji je najbliži nekom izlaznom redu (udaljenost između redova i je ). Ako i dalje postoji više takvih redova, odabire se onaj s najmanjim brojem.
-
Potom se u obzir uzmu sva prazna sjedala u odabranom redu, te se odabire ono koje ima najveći prioritet. Poredak sjedala prema prioritetu (od najvećeg do najmanjeg) jest:
- Sjedala uz prolaz srednje grupe (
DiF) - Sjedala uz prolaz prve i treće grupe (
CiG) - Sjedala uz prozor (
AiI) - Srednje sjedalo srednje grupe (
E) - Preostala srednja sjedala (
BiH)
Ako postoje dva prazna sjedala s istim najvećim prioritetom, tada je potrebno uzeti u obzir balans cijelog zrakoplova. Putnici s lijeve strane zrakoplova sjede na sjedalima s oznakama
A,B,CiD, dok putnici s desne strane zrakoplova sjede na sjedalima s oznakamaF,G,HiI. Algoritam odabire sjedalo koje se nalazi na strani zrakoplova s više praznih sjedala. Ako obje strane zrakoplova sadrže jednak broj praznih sjedala, algoritam odabire sjedalo s lijeve strane zrakoplova. - Sjedala uz prolaz srednje grupe (
Neka su sjedala u zrakoplovu unaprijed rezervirana (ne nužno koristeći opisani algoritam), a vaš je zadatak dodijeliti dodijeliti sjedala za sljedećih putnika prema opisanom algoritmu.
입력
U prvom su retku prirodni brojevi i (, ) iz teksta zadatka.
Idućih redaka predstavlja trenutno stanje sjedala u zrakoplovu. Preciznije, -ti se redak sastoji od točno znakova koji predstavljaju stanje -tog reda u zrakoplovu. Izlazni redovi i prolazi za putnike označeni su znakovima '.', znak '#' označava rezervirano sjedalo, dok znak '-' označava prazno sjedalo.
Možete pretpostaviti da se u zrakoplovu nalazi barem n praznih sjedala.
출력
Potrebno je ispisati redaka koji predstavljaju stanje sjedala u zrakoplovu nakon dodjele sjedala idućih putnika. Izlazni format mora biti jednak ulaznom uz dodatno svojstvo da je sjedalo koje je dodijeljeno -tom putniku označeno -tim malim slovom engleske abecede.