Rezolvare completă PbInfo #1978 gr

Tânărul Pagnad își dorește foarte mult să se poată juca jocul lui preferat, dar pe mama lui a apucat-o curățenia prin casă. După ce s-au împărțit sarcinile el a rămas să facă curat la papuci. Acesta are papucii așezați pe două etajere, fiecare papuc are pereche. Acesta poate efectua două tipuri de operații asupra papucilor, poate să ridice un papuc și să-l pună într-un anumit loc sau să împingă un papuc.
Pagnad trebuie să aranjeze papucii astfel încât fiecare papuc să aibe perechea lângă el. Deoarece acesta este un leneș, își dorește să ridice greutăți cât mai mici, deoarece fiecare papuc este caracterizat printr-o greutate. Aflați care este greutatea maximă pe care trebuie să o ridice Pagdan. Se consideră că fiecare pereche are greutăți diferite și că nu există două perechi asemănătoare.

Cerința

Se cere greutatea maxima pe care trebuie sa o ridice Pagdan.

Date de intrare

Fișierul de intrare gr.in conține pe prima linie n numărul de papuci, vor urma doua linii, fiecare cu n numere reprezentând greutățile papucilor.

Date de ieșire

Fișierul de ieșire gr.out va conține un singur număr, reprezentând greutatea maximă care trebuie ridicată.

Restricții și precizări

  • 1 ≤ n ≤ 1.000.000
  • greutățile papucilor sunt numere naturale ≤ 109.

Exemplu

gr.in

5              
2 1 8 2 8
9 9 4 1 4

gr.out

2

Explicație

Acesta va muta papucul de greutate 1 de pe raftul 2 pe raftul 1 și papucul de greutate 2 aflat pe poziția 4 de pe raftul 1 lângă primul papuc de greutate 2.

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 gr:

#include <cstdio>
#include <algorithm>
#define NMAX 1000005

using namespace std;

int sweep_rack(int *rack,int n)
{
    int res=0;
    int cand=0;
    for(int i=0; i<n;++i){
        if(rack[i]==cand)
            cand=0;
        else if(rack[i]<cand)
            res=max(res,rack[i]);
        else{
            res=max(res,cand);
            cand=rack[i];
        }
    }
    return max(res,cand);
}

int *read_rack(int n){
  int *res;
  res=(int *) malloc(n*sizeof(int));
  for (int i=0;i<n;++i)
    scanf("%d",&res[i]);
  return res;
}

int main(){
freopen("gr.in","r",stdin);
freopen("gr.out","w",stdout);

    int n;
    scanf("%d",&n);
    printf("%d\n",max(sweep_rack(read_rack(n),n), sweep_rack(read_rack(n),n)));
}
 

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 #1978 gr

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1978 gr 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!