.campion
conectare | înregistrare | căutare
Pagina principală » Probleme » lsort

ultima problemă
grupă: mică
sursă: OMI 2016
ultimul articol
autor: Prof. Radu Vişinescu
ultimul software
autor: Prof. Emanuela Cerchez
lsort


Timp maxim de execuţie / test:
0.1s
Memorie totala disponibilă / stivă:
16MB / 1MB

Se consideră o listă simplu înlănţuită (L1) ce conţine numerele întregi de la 1 la N (într-o ordine oarecare). Se doreşte construirea unei alte liste simplu înlănţuite (L2) care să conţină numerele din lista L1 în ordine crescătoare. Pentru a obţine lista L2, se vor şterge elemente din L1 şi se vor adăuga în L2, conform procedeului descris în continuare: iniţial lista L2 e vidă. La primul pas putem şterge orice element din L1 şi acesta se adaugă în L2. Apoi, în următorii N – 1 paşi, se poate şterge orice element din L1, dar acesta poate fi adăugat numai la începutul sau la sfârşitul lui L2. La final, L1 nu va conţine nici un element, iar L2 trebuie să conţină numerele de la 1 la N în ordine crescătoare. Întrucât există mai multe posibilităţi de a construi L2, vom defini în continuare costul construcţiei lui L2 şi vom dori să determinăm o posibilitate de construcţie a lui L2 care are costul minim.
Algoritmul de construcţie al lui L2 constă din N paşi, la fiecare pas ştergându-se un element din L1 şi adăugând acest element în L2 (conform restricţiilor precizate). La pasul i (1 <= i <= N), lista L1 conţine N–i+1 elemente şi lista L2 conţine i – 1 elemente. Dacă se mută elementul de pe poziţia k din L1 în L2 la pasul i (1 <= k <= N–i+1), costul acestei mutări este egal cu k * i. După mutarea elementului, lista L1 va avea cu un element mai puţin (toate elementele de pe poziţii mai mari decât k vor ajunge cu o poziţie mai în faţă) şi lista L2 va avea cu un element mai mult. Costul total al construcţiei lui L2 este egal cu suma costurilor mutărilor efectuate la fiecare dintre cei N paşi.

Cerinţă

Să se determine o posibilitate de construcţie a lui L2 care are costul minim.

Date de intrare

Pe prima linie a fişierului de intrare lsort.in se află numărul N, reprezentând numărul de elemente din L1. Următoarea linie conţine numerele întregi de la 1 la N, separate prin cel puţin un spaţiu, în ordinea în care se află acestea poziţionate în lista L1 (primul număr se afla pe poziţia 1 în L1, al doilea număr pe poziţia 2 ş.a.m.d.).

Date de ieşire

Pe prima linie a fişierului de ieşire lsort.out se va afişa costul minim de construcţie a lui L2. Pe următoarea linie se va afişa modul de construcţie al acesteia. Pe această linie se va afişa ordinea în care sunt mutate elementele din lista L1 în lista L2. Primul număr afişat va reprezenta numărul mutat din L1 în L2 la primul pas; al doilea număr va reprezenta numărul mutat la pasul 2 ş.a.m.d. Numerele afişate trebuie separate prin cel puţin un spaţiu. În cazul în care există mai multe posibilităţi de construcţie a listei L2 având costul minim, se poate afişa oricare dintre ele.

Restricţii

1 <= N <= 1000

Exemple

lsort.inlsort.outExplicaţii
4 4 1 3 2 15 3 4 2 1 La pasul 1, L1 = [4, 1, 3, 2] şi L2 = []. Se şterge din L1 elementul 3 (care se află pe poziţia 3) şi se introduce în L2. Costul acestei mutări este 3 * 1 = 3.
La pasul 2, L1 = [4, 1, 2] şi L2 = [3]. Se şterge din L1 elementul 4 (care se află pe poziţia 1) şi se introduce în L2 (este evident că acest element trebuie adăugat la sfârşitul listei L2 şi nu la începutul ei; în caz contrar, lista L2 nu ar mai fi sortată). Costul acestei mutări este 1 * 2 = 2.
La pasul 3, L1 = [1, 2] şi L2 = [3, 4]. Se şterge din L1 elementul 2 (care se află pe poziţia 2) şi se introduce în L2 (din nou, poziţia unde trebuie adăugat elementul este evidentă : la începutul listei L2). Costul acestei mutări este 2 * 3 = 6.
La pasul 4, L1 = [1] şi L2 = [2, 3, 4]. Se şterge din L1 elementul 1 (care se află pe poziţia 1) şi se introduce în L2. Costul acestei mutări este 1 * 4 = 4.
Costul total al construcţiei listei L2 este 3 + 2 + 6 + 4 = 15.
7 6 3 5 4 1 7 2 43 6 5 4 3 2 1 7

autor: Mugurel Ionuţ Andreica
propunător: Prof. Marinel Şerban
Liceul de Informatică “Grigore Moisil”
marinel_serban@yahoo.com
Articole recomandate
Probleme recomandate
De la ONI 2005: baschet, ingerasi, numar1, prieteni, robinson, aritma, cezar, cuburi2, joc8, bifo, joc9, pal, romeo, seceta, antena, avere, joc11, paianjen, suma2, vizibil, masina3, csir, patrat, ziduri, anticip, bsir, evantai, galax, spion, texan
De acelaşi autor: autobuze, bile, complex, balaur, vmem, kreg, ro, jobs, senzori, echipe, agitatie, center, algebra, tgraf, bcast, promo, asmax, sediu, granita, string, poligon1, csir, zoo, bombo, ab3, soc, rsp, tcast, tj, lanterna, base3, color, trans, ic, xp, v2d, ppcover, carray, asfalt1, module, gxor
Despre programare dinamică: vedete, fbr, tgv, zeratul, rv, comun, retea, circuit, sumdif, copaci, drum, text, palind, joc, vikingi, rafturi, balaur, plimbare, party, pc, pioni, seif, iepuri, numere3, perm, ture, bilete, prop, ro, reduceri, cuburi, invest, cutie2, stalpi, nr2, judete, strict, auto2, tree, jobs, leaves, pstring, program, datorii, senzori, farfurii, joc1, barbie, ambigram, rlcs, cub1, bio, chimie1, otilia, pasune, remi, sir23, tren1, joc5, pachete, echipe, comb, agitatie, ivv, peste, pitici, pipe, shgraf, tabara1, stop, randuri, zidar, log, sant, produs, subsir, cover, bcast, emax, dist, mesaj1, imax, avere, asmax, raft, suma2, joc12, fni, nr4, join, transport, masina3, microvirus, fat, cafea, echipe1, anticip, bsir, diamant, petrom, evantai, spion, acolor, evo, bombo, lacusta, lant, team, pitici1, numere8, dep, stiva, subgeom, pviz, tir1, cabane, piramida1, mosia, cuvinte1, gaina, materom, sortari, turnuri, trans, politie, codul, dansatori, nkbiti, kperms, treegame, siruri2, 123, jucarii, bradut, joc15, expozitie, text3, ic, echilibru, distsir, kmax, stalpi1, gaz, triunghi2, v2d, cuiburi, mine, orientare, activ, secvbiti, kcons, pokemon, ubergraf, left, acerc, autostrazi, kdist, select, cazare, fluviu, telecomanda, parcela, pion, subs, suma4, sirmax, bdotcom, viena, sablon2, telecab, ikebana, radare, hacker, obstacole, robotel, centrala, verigi, cds, wg, minusk, radioactiv, enigma, jb, efect, maxviz, ripstick, progresii, maxtri, combcuv, blis, subsiruri, mijloc, probleme, unuzero, palindrom1, minerale, speed, zmax, spider, cntgcd, interclasare, bus, pariuri, riglef, fractii2, fall, arbsum, conuri, arbvalmax, procente, metrou
Despre recursivitate: tren, mere, chimie, sarpe, soldati, formule, infinit, compress, ploaia, cartoane, sub, metro, windows, lacuri, apel, maxq, pav, joc11, paianjen, suma2, monkey, csir, imagine, dir, desert, echitabil, rez, logic, gradina, links, dreptunghiuri, expresie1, cumpanit, reziston, antitero, sablon3
Despre matrice: vopsea, harta, opmat, sarpe, light, magic2, tetris, origami, concurs, iepuras, tribile, criptmat, cutie, patrate, 3d, pajura, perspic, vecini2, livada, matrice3, kafka, erdos, grup, scor2, reteta2, rezervatie, scoici, tablou, game, stea, submatrix, cifru, jokes, oua, trecere, na, dotnet, renju, ghici, mere1, agitatie, lacuri, sotron, desen1, camion, ceas1, fibo, parc, excursia, matricea, zidar, joc6, log, concurs2, cladiri, dist, centru, robinson, cuburi2, joc8, joc9, romeo, adevar, soricel2, avere, joc11, vizibil, sah1, blockout, masina3, anticip, matrice1, evantai, spion, pereti, zumzi, roboti, placare, tabel, ocr, numere7, lacusta, becuri, sir5, flori, cartele, furnica, pavare, poarta, rj, peri, poligon2, sablon1, gradina, matrice4, poartas, balcon, submdisj, v, matrx, figura, neuroni, raze, roboti1, bila, iepurasi, colorare, mat, submatrix1, simetric1, plaja, xor2, guess, albine1, joct, alfabetar, stele, tablou1, alpinist, cladire, cri, grupe2, el, mahjong, sir9, acces, tort1, joc17, mesaj3, zar1, xy, poteci, avioane, broscute, safeu, acoperire1, radioactiv, robot4, lcdr, jb, slide, maxtri, dame, triunghi4, elicop, compresie, mijloc, cubulete, romb, 2ndesc, medalion, bile6, zigzag, puncte5, intersectii, matd3, matrixdel, speed, seif1, traseu2, incadrare, betasah, zona, latin, zmax, amestec, sudoku1, gradina1, spider, zone, bemo, rombul, interclasare, rebus1, tabla, arrows, pseudobil, patrat1, rascoala, harta2, relatii, lasere, defrag, matcnt, ssdj, cript, ssk, teren1, fence, cifre6
surse trimise | ajutor