Rezolvare completă PbInfo #1140 Ordine

Gigel a primit de ziua lui un joc cu bile. Jocul conţine n bile numerotate cu numerele naturale distincte de la 1 la n. Jucându-se, Gigel a amestecat bilele astfel încât acum ele nu mai sunt în ordine. Ca să le pună înapoi în cutia jocului, Gigel ia de pe masă bilele una câte una, şi le pune în cutie formând un şir. Însă Gigel se joacă şi acum, astfel încât el nu pune bilele la rând, una după alta, ci are o regulă pe care o respectă cu stricteţe. Astfel, Gigel încearcă să plaseze fiecare bilă pe care a luat-o de pe masă exact la mijlocul şirului de bile deja format. Dacă acest lucru nu este posibil (șirul are lungime impară), atunci el plasează bila la sfârşitul şirului de bile deja format. După ce toate bilele au fost puse în cutie, Gigel îşi dă seama că nu a notat ordinea în care a luat bilele de pe masă şi, în mod firesc, îşi pune problema dacă nu cumva poate deduce acest lucru din şirul de bile pe care tocmai l-a format.

Cerinţe

Cunoscându-se numărul de bile şi configuraţia finală a bilelor în şir să se determine:

1. numărul ultimei bile luate de pe masă;
2. ordinea în care bilele au fost luate de pe masă.

Date de intrare

Fișierul de intrare ordine.in conține pe prima linie numărul n de bile. Pe linia a doua a fişierului de intrare se găsesc n numere naturale, cu valori între 1 şi n, separate prin câte un spaţiu, care reprezintă şirul de bile obţinut de Gigel în cutie. Linia a treia conţine una dintre valorile 1 sau 2 reprezentând cerinţa 1, dacă se cere determinarea ultimei bile luate de Gigel de pe masă, respectiv cerinţa 2, dacă se cere determinarea ordinii în care Gigel a luat bilele de pe masă.

Date de ieșire

Fișierul de ieșire ordine.out va conține pe prima linie o valoarea naturală reprezentând numărul ultimei bile luate de Gigel, dacă cerinţa a fost 1, respectiv n numere naturale, cu valori cuprinse între 1 şi n, separate prin câte un spaţiu, care reprezintă ordinea în care Gigel a luat bilele de pe masă, dacă cerinţa a fost 2.

Restricții și precizări

  • 1 <= n <= 250000
  • Pentru cerinţa 1 se acordă 30% din punctaj, iar pentru cerinţa 2 se acordă 70% din punctaj.

Exemplul 1

ordine.in

7
1 7 2 5 3 4 6
1

ordine.out

5

Exemplul 2

ordine.in

7
1 7 2 5 3 4 6
2

ordine.out

1 3 7 4 2 6 5

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Ordine:

//serban marinel decembrie 2014
//cu 1 vector - direct din citire O(n)
#include <fstream>

using namespace std;

#define DIM 1000001

ifstream fin("ordine.in");
ofstream fout("ordine.out");

int b[DIM];
int n, i, j, tip;

int main()
{
   //citire date de intrare
   fin >> n;
   j = 1;
   for (i = 1; i <= n; ++i)
   {
      fin >> b[j];
      j += 2;
      if (j > n) j = 2;
   }
   fin >> tip;
   if (tip == 2)   //rezolv cerinta 2
      //afisez rezultatul
      for (i = 1; i <= n; ++i) fout << b[i] << ' ';
   else   //rezolv cerinta 1
      fout << b[n];        //e ultima bila
   fout << '\n';
   return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1140 Ordine

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1140 Ordine de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!