Rezolvare completă PbInfo #1192 Arhitectura2

Cerința

După ce arhitectul Gigel a reușit să rezolve sarcina primită de la primărie ( #Arhitectura ), el și-a dat seama că aspectul zonei nu va fi unul după preferințele sale. Astfel, s-a stabilit că în oraș nu există clădiri cu înălțimea mai mare decât hmax. Acum primăria îi cere afișarea clădirilor în ordine descrescătoare, precum și verificarea, pentru fiecare clădire din lista ordonată, dacă înălțimea ei este egală cu media aritmetică a înălțimilor celor două clădiri vecine.

Gigel vă cere ajutorul ca să-și termine proiectul care a devenit mult prea greu .

Date de intrare

Fișierul de intrare arhitectura2.in conține pe prima linie numărul n, iar pe următoarele linii n numere naturale separate prin spații. Fiecare linie conține maxim 100.000 de valori.

Date de ieșire

Fișierul de ieșire arhitectura2.out va conține doua linii cu n valori fiecare. Prima linie va conține înălțimile în ordine descrescătoare , iar a doua linie va conține n valori 1 sau 0, după cum înălțimea clădirii curente este sau nu egală cu media aritmetică a înălțimilor celor două clădiri vecine.

Restricții și precizări

  • 1 ≤ n ≤ 2000000
  • hmax ≤ 100000
  • Pentru 40% din teste n ≤ 50000
  • Pentru 80% din teste n ≤ 500000
  • Considerăm că înaintea primei clădiri și după ultima clădire se află câte o pseudoclădire de înălțime 0 – care va interveni în verificarea cerută.

Exemplu

arhitectura2.in

10
5 10 10 9 5 2 5 8 5 2

arhitectura2.out

10 10 9 8 5 5 5 5 2 2 
0 0 1 0 0 1 1 0 0 0

Explicatie:

Șirul devine 10 10 9 8 5 5 5 5 2 2
Doar 9 si cei doi de 5 din mijloc respectă condiția.

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

/*
Aceasta problema se bazeaza pe un algoritm de sortare numit Counting Sort ( algoritm de numarare )
Solutii alternative :
- algoritm de sortare de complexitate O ( N * N ) - 40p
- algoritm de sortare rapida prin comparare O ( N * log N ) - 80p
*/

#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std ;

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

int n ;
int a[2000005] ; //memoreaza inaltimile
int b[2000005] ; //memoreaza inaltimile sortate
int c[2000005] ; //memoreaza frecvente

int main ()
{
 //citim
 fin >> n ;
 int inaltime_maxima = 0 ;
 for ( int i = 0 ; i < n ; ++i )
    {
     fin >> a[i] ;
     if ( a[i] > inaltime_maxima )
        inaltime_maxima = a[i] ;
    }

 //sortarea prin numarare
 int k = inaltime_maxima ;

 for ( int i = 0 ; i < n ; ++i )
    c[a[i]]++ ;
 for (int i = 1 ; i < k + 1 ;  ++i )
    c[i] += c[i-1] ;
 for (int i = n - 1 ; i >= 0 ; --i )
     b[--c[a[i]]] = a[i] ;

 //raspundem la problema
 for ( int i = n - 1 ; i >= 0 ; --i )
    fout << b[i] << " " ;
 fout << "\n" ;

 for ( int i = n - 1 ; i > 0 ; --i )
    {
     if ( b[i] * 2 == b[i-1] + b[i+1] )
        fout << "1 " ;
     else
        fout << "0 " ;
    }
 if ( b[1] == 2 * b[0] )
    fout << "1" ;
 else
    fout << "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 #1192 Arhitectura2

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