Logo
(追記) (追記ここまで)

8418번 - Biblioteka 다국어

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB16000.000%

문제

Podczas wakacji Bajtazar stał się miłośnikiem dobrej literatury. Czytał bardzo dużo książek, które wypożyczał z biblioteki. Pewnego dnia odwiedził go kolega Wyjątek i zainteresował się jedną z wypożyczonych książek. Po długich namowach Bajtazar, niepomny swoich poprzednich problemów z Wyjątkiem, zgodził się wreszcie mu ją pożyczyć.

Wakacje szybko minęły. Rozpoczął się nowy rok szkolny (choć i tak w Bajtocji rozpoczyna się wyjątkowo późno - 10 Terabajta) i nadszedł czas zwrotu książek do biblioteki. Bajtazar przypomniał sobie, że jedną z nich pożyczył Wyjątkowi. Kiedy poprosił go o jej zwrot, ten przyznał się, że podczas pobytu w Kurorcie zgubił ją bawiąc się na Lollobrygidzie. Bardzo to zmartwiło biednego Bajtazara, bo wiedział, że będzie miał w związku z tym wiele nieprzyjemności.

Kiedy opowiedział o wszystkim paniom w Bibliotece, te zdecydowały, że za swoje lekkomyślne zachowanie będzie musiał ponieść karę i kazały mu przyjść w 0110 (odpowiednik naszej soboty), aby pomóc im w sortowaniu kart bibliotecznych. Jako, że kilku kolegów Bajtazara już odbyło taką karę, to karty znajdują się w wielu posortowanych plikach o różnych rozmiarach, a zadaniem Bajtazara jest połączyć je w jeden plik.

Ponieważ Bajtazar wcześniej zaplanował już sobie ten dzień, a jednocześnie nie chce znów zawieść pań bibliotekarek, musisz mu pomóc napisać program, który pozwoli mu ustalić, jak wiele czasu zajmie sortowanie kart oraz wyznaczyć stosowną kolejność łączenia plików, tak aby mógł to zrobić jak najszybciej.

Bajtazar może naraz scalić tylko dwa pliki kart. Dla uproszczenia przyjmujemy, że czas scalania dwóch plików jest równy sumie ich długości.

Napisz program, który:

  • wczyta:
    • liczbę plików kart bibliotecznych, które należy scalić w jeden uporządkowany plik,
    • długości plików,
  • obliczy:
    • minimalny łączny czas uporządkowania kart w bibliotece,
    • kolejność łączenia plików kart dającą ten czas,
  • wypisze wynik.

입력

Wejście składa się z dokładnie dwóch wierszy. Pierwszy wiersz zawiera liczbę n ( 2 ≤ n ≤ 100 000) plików do scalenia, w drugim wierszu znajduje się n liczb s1, s2,..., sn, poodzielanych pojedynczymi odstępami, gdzie si oznacza długość pliku o numerze i (1 ≤ si ≤ 10 000).

출력

Twój program powinien wypisać n wierszy. Wiersz pierwszy powinien zawierać dokładnie jedną liczbę równą minimalnemu czasowi potrzebnemu do scalenia wszystkich plików w jeden. Każdy z następnych wierszy odpowiada łączeniu dwóch plików. Wiersz o numerze i + 1 (1 ≤ in - 1), powinien zawierać dwie liczby całkowite ki, li oddzielone pojedynczym odstępem, 1 ≤ ki < lin. Liczby te mówią, że w i-tym kroku Bajtazar scala dwa pliki o numerach ki oraz li. Nowo powstały plik otrzymuje numer ki, a jego długość jest równa sumie długości plików ki oraz li.

Jeśli istnieje wiele optymalnych kolejności łączenia plików, Twój program powinien wypisać tylko jedną z nich.

제한

예제 입력 1

4
1 2 4 7

예제 출력 1

24
1 2
1 3
1 4

힌트

출처

Contest > Algorithmic Engagements > PA 2005 2-1번

(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /