TAKMIČENJA IZ PROGRAMIRANJA


Sva pitanja, predloge ili primedbe u vezi sa takmičenjima iz programiranja možete slati na e-mail:

tak.prog@gmail.com

U toku perioda za žalbe, sve žalbe možete slati na ovaj isti e-mail.

bandere.tests.rar    51,054 b      test primeri
bandere.checker.cpp    1,872 b      izvorni kod programa za testiranje

zadatak: Bandere

Električar Mile je najbolji majstor koga ste ikada videli. Razume se u sve, brzo popravlja aparate, a pre svega nije skup. Jednog dana je otišao u obližnji grad Abenišbe da popravi nekoliko bandera. Kada je stigao zatekao je ogromnu mrežu. Bandere su bile razbacane po gradu, bez ikakvog rasporeda. Mile je rešio da preuzme stvar u svoje ruke: povadio je sve bandere i želi da ih postavi u jednu liniju, tako da je rastojanje između svake dve susedne bandere jednako 1 m. Naravno, sve veze moraju da ostanu na svojim mestima. Dužina žice koju treba da razvuče između dve bandere je jednaka rastojanju između njih u metrima (najkraće rastojanje). Mile želi da postavi bandere tako da ukupna dužina žice koju će potrošiti na povezivanje bude što je moguće manja.

Kako ovaj problem nije Miletov fah, obratio se vama - mladim programerima, da mu pomognete i pokažete mu raspored bandera, tako da minimizuje ukupnu dužinu žice. Kada sazna permutaciju bandera, Mile će začas da ih postavi i poveže.

Za ovaj zadatak potrebno je da predate izlazne datoteke za 10 ulaznih datotoka bandere.01.in, bandere.02.in, ..., bandere.10.in, koji se nalaze u arhivi na računaru. Izlazn se pamti u datoteke bandere.01.out, bandere.02.out, ..., bandere.10.out, pri čemu broj u nazivu izlazne datoteke odgovara broju u nazivu ulazne datoteke.

Ulaz:

(Ulazni podaci se nalaze u datoteci bandere.nn.in) U prvom redu ulazne tekstualne datoteke nalaze se dva prirodna broja n i m, koji predstavljaju broj bandera i broj međusobnih veza. U svakoj od sledećih m linije se nalaze dva prirodna broja a i b (1 ≤ a, bn), koji predstavljaju po jednu vezu - bandere sa rednim brojevima a i b su povezane žicom.

Izlaz:

(Izlazne podatke upisati u datoteku bandere.nn.out) U prvom redu izlazne tekstualne datoteke treba zapisati "#bandere, nn" (bez navodnika) gde umesto nn treba zapisati broj test primera. U drugom redu izlazne datoteke upisati minimalnu dužinu svih žica. U sledećem redu treba ispisati jednu permutaciju brojeva od 1 do n, koja predstavlja raspored bandera za datu dužinu.

Način bodovanja:

Broj bodova za svaki test primer se određuje na sledeći način: neka je dužina žice u vašem rešenju VAL, a OPT je minimalna dužina među svim takmičarima, uključujući i komisijska rešenja. Broj bodova koje dobijate se računa po formuli (zaokruživanje se vrši na prvi veći ceo broj): 10(3 - VAL/OPT)/2

Drugim rečima, ako je vaše rešenje identično sa najboljim dobijate 10 poena. U slučaju da je rešenje duplo lošije - dobićete 1 poen. Za gornji test primer dobijamo 10(3 - 11/8)/2 = 6.49, pa je broj bodova 7. Ako je dužina koju navedete u izlaznom fajlu različita od stvarne dužine za datu permutaciju dobijate 0 poena za taj test primer.

Primer 1:

bandere.00.in      bandere.00.out
5 6
1 2
1 4
1 5
2 3
2 5
3 5
        
# bandere 00
11
2 3 1 5 4




Objašnjenje:

Na slici je prikazana mreža bandera koju treba "linearizovati". Rešenje iz primera ima ukupnu dužinu svih žica 11: dužina prve žice između bandere 1 i 2 je 2 m, dok je dužina treće žice za bandere 1 i 5 jednaka 1 m. Sličnim rasuđivanjem dobijamo da je ukupna dužina žica 2 + 2 + 1 + 1 + 3 + 2 = 11. Minimalna dužina je jednaka 8, na slici dole.