Rezolvare completă PbInfo #1946 Zece

Pentru cei elevi din clasa a VI-a competiția este foarte importantă și, pentru a se pregăti suplimentar, aceștia lucrează de pe site-ul www.PROBLEMEINFORMATICA.RO.

Pentru a-i încuraja, profesoara de informatică le promite câte o notă de 10 primilor k elevi, cei mai harnici și sârguincioși.

Dacă observă că mai sunt elevi care au același număr de probleme rezolvate ca și cel de pe poziția k, atunci profesoara, echidistantă, mai pune în plus note de 10 la toți aceștia.

Cerința

Să se scrie un program care, citind numărul N de elevi ai clasei, numărul k de elevi notați cu 10 și N valori reprezentând numărul de probleme rezolvate de fiecare elev, rezolvă cerințele:

1. Afișează în ordine descrescătoare numărul de probleme lucrate de elevii care vor primi nota 10.
2. Afișează în ordinea descrescătoare a numărului de probleme rezolvate, numerele de ordine ale tuturor elevilor care primesc nota 10.

Date de intrare

Fișierul de intrare zece.in conține pe prima linie un număr natural C (C poate avea doar valoarea 1 sau valoarea 2). A doua linie conține, în această ordine, separate printr-un un spațiu, numerele N și k. A treia linie conține, în ordine numărul de probleme rezolvate de cei N copii, numerotați de la 1 la N, exprimate prin numere naturale, despărțite prin câte un spațiu.

Date de ieșire

Dacă valoarea lui C este 1, se va rezolva numai cerința 1). În acest caz, fişierul de ieșire zece.out va conține pe prima linie minim k numere naturale reprezentând numărul de probleme rezolvate de elevii care primesc nota 10, în ordinea descrescătoare a acestora (valorile vor fi separate de câte un spațiu).

Dacă valoarea lui C este 2, se va rezolva numai cerința 2). În acest caz, fişierul de ieșire zece.out va conține pe prima linie minim k numere naturale reprezentând numerele de ordine ale elevilor în ordinea descrescătoare a numărului de probleme rezolvate de aceștia. Dacă sunt elevi care au același număr de probleme rezolvate se vor afișa elevii în ordinea crescătoare a poziției lor (valorile vor fi separate de câte un spațiu).

Restricții și precizări

  • 1 ≤ N ≤ 1000
  • 1 ≤ k ≤ N
  • cele N numere citite vor fi mai mici decât 1.000.000

Exemplul 1

zece.in

1
5 3
18 45 55 60 45

zece.out

60 55 45 45

Explicație

Cerința este 1.
N=5, K=3
Cele mai multe probleme rezolvate sunt 60 55 45 dar pentru că avem doi elevi cu 45 de probleme, vor primi nota 10, 4 elevi, în loc de 3.

Exemplul 2

zece.in

2
5 3
18 45 55 60 45

zece.out

4 3 2 5

Explicație

Cerința este 2.
N=5, K=3
Elevul situat pe poziția 4 are cele mai multe probleme – 60, este urmat de elevul de pe poziția 3 care are 55 de probleme și apoi de elevii de pe pozițiile 2 și 5 care au fiecare câte 45 de probleme.

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

#include <iostream>
#include <fstream>
using namespace std;

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

unsigned int C;

int a[1001], b[1001], N, k, cati, i, j;

int main()
{
    fin>>C>>N>>k;
    for(i=1; i<=N; i++) fin>>a[i];
    for(i=1; i<=N; i++) b[i]=a[i];

    for(i=1; i<=N-1; i++)
        for(j=i+1; j<=N; j++)
            if(a[i]<a[j]) swap(a[i], a[j]);


if(C==1)
    {
       for(i=1; i<=k; i++) fout<<a[i]<<;
       j=i;
       while(a[j]==a[i-1]) {fout<<a[j]<<; j++;}
    }
if(C==2)
    {

      for(j=1; j<=k; j++)
        for(i=1; i<=N; i++) if(b[i]==a[j] && a[j]!=a[j-1]) fout<<i<<;
    }
    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 #1946 Zece

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