You are on page 1of 3

International

Olympiad in Informatics 2017


July 28 – August 4, 2017
Tehran, Iran books
Day 2 Tasks Indonesian (IDN)

Buku-Buku Kuno
Kota Teheran adalah tempat di mana Perpustakaan Nasional Iran berada. Kekayaan utama
perpustakaan ini terletak pada sebuah aula panjang yang memiliki meja, dinomori dari hingga
dari kiri ke kanan. Pada setiap meja, terdapat sebuah buku kuno tertulis tangan yang
dipamerkan. Buku-buku ini diurutkan berdasarkan usia, yang membuat para pengunjung kesulitan
untuk mencari buku-buku berdasarkan judul. Oleh karena itu, manajer perpustakaan memutuskan
untuk mengurutkan buku-buku tersebut terurut abjad berdasarkan judul.

Aryan, seorang pustakawan, akan melakukan pengurutan tersebut. Ia telah membuat sebuah daftar
sepanjang , yang berisi bilangan-bilangan bulat berbeda-beda dari hingga . Daftar ini
mendeskripsikan perubahan-perubahan yang diperlukan untuk mengurutkan buku-buku tersebut
terurut abjad: untuk setiap , buku yang saat ini terletak pada meja harus dipindahkan ke
meja .

Aryan memulai pengurutan buku-buku tersebut pada meja . Ia ingin kembali ke meja yang sama
setelah menyelesaikan pengurutan tersebut. Karena buku-buku tersebut sangat berharga, ia tidak
dapat membawa lebih dari satu buku pada suatu saat. Selama pengurutan, Aryan akan melakukan
serangkaian langkah. Setiap langkah harus berupa salah satu dari berikut ini:

Jika ia tidak sedang membawa buku dan terdapat buku pada meja di mana ia berada, ia dapat
mengambil buku ini.
Jika ia sedang membawa buku dan terdapat buku lain pada meja di mana ia berada, ia dapat
menukar buku yang sedang ia bawa dengan buku yang terdapat pada meja tersebut.
Jika ia sedang membawa buku dan ia sedang berada pada meja kosong, ia dapat meletakkan
buku yang sedang ia bawa pada meja tersebut.
Ia dapat berjalan ke meja yang mana saja. Ia dapat membawa sebuah buku saat ia
melakukannya.

Untuk setiap , jarak di antara meja-meja dan adalah tepat meter. Tugas
Anda adalah menghitung total jarak minimum yang Aryan perlukan untuk mengurutkan seluruh buku
tersebut.

Detil implementasi
Anda harus mengimplementasikan prosedur berikut ini:

​int64 minimum_walk(int[] p, int s)​

adalah sebuah array sepanjang . Buku yang pada mulanya terletak pada meja harus

Books (1 of 3)
dipindahkan oleh Aryan ke meja (untuk setiap ).
adalah nomor meja tempat Aryan berada pada mulanya, dan tempat di mana ia harus
berada setelah pengurutan.
Prosedur ini harus mengembalikan total jarak minimum (dalam meter) Aryan harus berjalan
untuk mengurutkan buku-buku tersebut.

Contoh

​minimum_walk([0, 2, 3, 1], 0)​

Pada contoh ini, dan Aryan pada mulanya berada pada meja . Ia mengurutkan buku-buku
tersebut dengan cara berikut ini:

Ia berjalan ke meja dan mengambil buku yang yang terletak pada meja. Buku ini harus
diletakkan pada meja .
Kemudian, ia berjalan ke meja dan menukar buku yang sedang ia bawa dengan buku yang
terletak pada meja. Buku baru yang sedang ia bawa harus diletakkan pada meja .
Kemudian, ia berjalan ke meja dan menukar buku yang sedang ia bawa dengan buku yang
terletak pada meja. Buku baru yang sedang ia bawa harus diletakkan pada meja .
Kemudian, ia berjalan ke meja dan meletakkan buku yang sedang ia bawa pada meja.
Pada akhirnya, ia berjalan kembali ke meja .

Perhatikan bahwa buku pada meja sudah berada pada tempat yang benar, yakni meja , sehingga
Aryan tidak harus mengambilnya. Total jarak perjalanannya pada solusi ini adalah meter. Ini
adalah solusi optimal; maka, prosedur tersebut harus mengembalikan .

Batasan

Array berisi bilangan bulat berbeda-beda di antara dan , inklusif.

Books (2 of 3)
Subsoal
1. (12 poin) dan
2. (10 poin) dan
3. (28 poin)
4. (20 poin)
5. (30 poin) tidak ada batasan tambahan

Grader contoh
Grader contoh membaca masukan dengan format berikut ini:

baris :
baris :

Grader contoh mencetak sebuah baris berisi nilai kembalian dari minimum_walk.

Books (3 of 3)

You might also like