Bojātais kabelis

grūts
Latvijas Informātikas olimpiādes logo
Uzdevums no Latvijas 38. (2024./2025. m.g.) informātikas olimpiādes (LIO) valsts kārtas; jaunākajai (8.-10. klašu) grupai.

Stāsts

Kādā datorfirmā NN datori ir saslēgti vienotā tīklā tā, ka katru divu datoru pāris ir vai nu tieši savienots ar kabeli, vai arī eksistē unikāla secīgu datoru virkne no viena datora līdz otram, kur katrus divus blakus datorus savieno kabelis. Datori tīklā ir sanumurēti ar naturāliem skaitļiem no 11 līdz NN pēc kārtas.

Viena šāda datortīkla piemērs parādīts 1. attēlā.

1. attēls: Datortīkla piemērs
1. attēls: Datortīkla piemērs

Meistars Matīss ir pamanījis, ka datortīkls vairs nedarbojas kā nākas, un pēc viņa ilggadējās iepriekšējās pieredzes ir skaidrs, ka vainīgs ir kāds no sistēmā esošajiem kabeļiem.

Meistara rīcībā ir līdzekļi, kas ļauj pieslēgties jebkuriem diviem datoriem un noteikt, vai starp tos savienojošiem kabeļiem kāds nav bojāts.

Uzrakstiet datorprogrammu, kas organizē šādu pieslēgšanos virkni ar mērķi atrast bojāto kabeli.

Komunikācija

Šis ir interaktīvs uzdevums. Jūsu programmai, sākot darbu, pirmajā ievaddatu rindā dots naturāls skaitlis NN (2N200002 \leq N \leq 20000) - datoru skaits datortīklā. Nākamajās N1N-1 ievaddatu rindās katrā dots viena tieši ar kabeli savienota datoru pāra apraksts - savienoto datoru numuri, kas atdalīti ar tukšumzīmi.

Bojātā kabeļa atrašanās vietu vērtēšanas sistēma tur slepenībā.

Tad jūsu programma var veikt vaicājumus, tos rakstot izvadā šādā formātā: 0 d1 d20\ d_1\ d_2, kur d1d_1 un d2d_2 ir divu datoru numuri - atšķirīgi naturāli skaitļi (1d1, d2N1 \leq d_1,\ d_2 \leq N).

Vērtēšanas sistēma uz vaicājumu izdod atbildi nākamajā ievaddatu rindā. Atbilde ir vesels skaitlis - 00, ja kabeļu virknē no d1d_1 līdz d2d_2 kāds no kabeļiem ir bojāts, vai 11, ja neviens no kabeļiem šajā virknē nav bojāts.

Jūsu programma katrā testā var veikt ne vairāk kā 2000020000 vaicājumus.

Kad bojātā kabeļa atrašanās vieta noteikta, programmai jāizvada 1 dx dy1\ d_x\ d_y (1dx, dyN1 \leq d_x,\ d_y \leq N), kur dxd_x un dyd_y ir bojātā kabeļa galos esošo datoru numuri, un darbība jābeidz. Vērtēšanas sistēma neatbildēs uz šo izvadu un nepieņems sekojošus vaicājumus.

Raksturojot kabeli, galapunktu secībai nav nozīmes. Visos testos būs tieši viens bojātais kabelis.

Piemērs

IevaddatiIzvaddati (jūsu programmas vaicājumi)Komentāri
8
2 5
8 7
4 2
1 8
3 6
3 7
8 2

Atbilst tekstā dotajam attēlam.

0 1 6
1
0 7 5
1
1 4 2

Bojātais kabelis var būt vienīgi starp 22 un 44.

Izpildes resursu ierobežojumi

CPU izpildes laiks uz testu: 0.4 sekundes.
RAM atmiņas apjoms uz testu: 256 megabaiti.

Apakšuzdevumi un to vērtēšana

#Apakšuzdevuma aprakstsPunkti
1.

Tikai divi datori: N=2N=2.

1
2.

N100N \leq 100.

9
3.

Katrs dators ir savienots ar ne vairāk kā diviem citiem datoriem.

20
4.

N20000N \leq 20000.

70
Apakšuzdevumu punktu summa = 100.

Piezīmes

Lai garantētu, ka jūsu programmas "vaicājumus" saņem vērtēšanas sistēma, jums ir "jāsinhronizē" ( flush ) izvaddatu plūsma ( stdout ) pēc katra vaicājuma.

ValodaPiemērs

C++

std::cout << something << std::endl; ... "std::endl" nodrošina sinhronizāciju

Go

fmt.Println(something) ... standarta datu plūsma nav īpaši jāsinhronizē

Java

System.out.println(something); System.out.flush();

Pascal

writeln(something); flush(output);

Python

print(something, flush=True)

Ja testa ietvaros tiks pārsniegts maksimāli atļautais vaicājumu skaits, tā statuss pēc testēšanas būs "Nepareiza atbilde".