Rezolvare completă PbInfo #1147 OniGim

La ONIGIM2013 participă N elevi de clasa a V-a având ca id-uri, în ordine, numerele naturale de la 1 la N. Anul acesta organizatorii au afişat la clasa a V-a toate punctajele distincte obţinute de elevi, în ordine strict crescătoare p1, p2,…, pK, şi un şir de N valori a1, a2,…, aN, unde ai reprezintă numărul de elevi care au punctaje strict mai mici decât punctajul elevului având id-ul i (1≤i≤N).

Cerință

Cunoscând numărul de elevi (N), numărul de punctaje distincte (K) obţinute de elevii de clasa a V-a, punctajele p1, p2,…, pK, în ordine strict crescătoare, şi valorile a1, a2,…, aN cu semnificaţia din enunţ, să se scrie un program care determină:

a) Punctajul obţinut de fiecare elev în ordinea crescătoare a id-urilor.
b) Numărul de distincţii acordate de organizatori. Numărul de distincţii este egal cu numărul de elevi care au obţinut cele mai mari trei punctaje distincte.
c) Numărul maxim de elevi care au obţinut acelaşi punctaj.

Date de intrare

Fișierul de intrare onigim.in conține pe prima linie numerele naturale N şi K reprezentând numărul de elevi, respectiv numărul de punctaje distincte obţinute de elevi. Pe a doua linie sunt K numere naturale în ordine strict crescătoare p1, p2,…, pK reprezentând punctajele distincte obţinute de elevi, şi pe a treia linie sunt N numere naturale a1, a2,…, aN, unde ai reprezintă numărul de elevi care au punctaje strict mai mici decât punctajul elevului cu id-ul i.

Date de ieșire

Fișierul de ieșire onigim.out va conține trei linii. Pe prima linie se află N numere naturale v1, v2,…, vN reprezentând punctajele obţinute de cei N concurenţi (vi- punctajul concurentului cu id-ul i), pe a doua linie se află un număr natural D reprezentând numărul de distincţii acordate de organizatori, pe a treia linie se află un număr natural M reprezentând numărul maxim de elevi care au obţinut acelaşi punctaj.

Restricții și precizări

  • 1 ≤ N ≤ 1000;
  • 1 ≤ pi ≤ 300, (1≤i≤N);
  • 0 ≤ ai < 1000, (1≤i≤N);
  • 1 ≤ K ≤ 1000;

Exemplu

onigim.in

6 4
100 150 175 200
4 2 0 0 3 4 

onigim.out

200 150 100 100 175 200
4
2

Explicație

Sunt 4 elevi care au punctajul mai mic decât punctajul elevului cu id-ul 1, 2 elevi cu punctajul mai mic decât punctajul elevului cu id-ul 2, etc.

Cele mai mari 3 punctaje sunt obţinute de 4 elevi. Numărul maxim de elevi care au acelaşi punctaj este 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 OniGim:

//lucia miron
#include <fstream>
using namespace std;
ifstream fin("onigim.in");
ofstream fout("onigim.out");
int n,k,i,j,v[1001],a[1001],p[301],fr[1001],nrdistinctii,nr;
int main()
{
    fin>>n>>k;
    for(i=1;i<=k;i++)
            fin>>p[i];
    for(i=1;i<=n;i++)
            {
                fin>>a[i];
                fr[a[i]]++;
            }
    i=1;
    for(j=0;j<=n;j++)
        if(fr[j]!=0)
        {
            v[j]=p[i];
            i++;
        }
    for(i=1;i<=n;i++)
            a[i]=v[a[i]];
    for(i=1;i<=n;i++)
            fout<<a[i]<<' ';
    fout<<'\n';
    nrdistinctii=0;nr=0;
    for(i=n;i>=0;i--)
        if(fr[i]!=0&&nr<3)
        {
            nrdistinctii+=fr[i];
            nr++;
        }
    fout<<nrdistinctii<<'\n';
    nr=0;
    for(i=0;i<n;i++)
            if(nr<fr[i])nr=fr[i];
    fout<<nr<<'\n';
    fout.close();

    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 #1147 OniGim

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