Rezolvare completă PbInfo #403 Concert

Cerinţa

Gigel este un cântăreț începător. El știe deja să cânte n melodii, și pentru fiecare melodie se cunoaște durata, exprimată în minute și secunde. Gigel va participa la o emisiune de televiziune, unde va putea cânta timp de T secunde. El vrea să cânte cât mai multe melodii, pentru a-și demonstra talentul deosebit.

Ajutați-l să aleagă piesele pentru emisiune, și vă va răsplăti cu un autograf.

Date de intrare

Fişierul de intrare concert.in conţine pe prima linie numerele n T. Fiecare dintre următoarele n linii conține durata unei melodii, în formatul m:s, unde m și s pot avea una sau două cifre.

Date de ieşire

Fişierul de ieşire concert.out va conţine pe prima linie numărul M, reprezentând numărul maxim de melodii care pot fi alese. Următoarea linie va conține M numere între 1 și n, reprezentând numărul de ordine al melodiilor alese, așa cum sunt ele date în fișierul de intrare.

Restricţii şi precizări

  • 1 ≤ n ≤ 100
  • 1 ≤ T ≤ 1000
  • 0 ≤ m ≤ 10
  • 0 ≤ s ≤ 59

Exemplu

concert.in

7 450
2:30
1:45
2:10
03:00
01:15
02:05
2:05

concert.out

4
2 5 6 7 

Explicație

În 450 de secunde se pot cânta maxim 4 melodii, de exemplu cele numerotate cu: 2 5 6 7.

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

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>

using namespace std;

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

int n,T, v[105] , x[105];

int main(){
    fin >> n >> T;
    for(int i = 0 ; i < n ; ++i)
    {
        char s[10], *p;
        fin >> s;
        p = strchr(s,':');
        *p=0;
        v[i] = 60 * atoi(s) + atoi(p+1);
        x[i] = i;
    }
    for(int i=0 ; i < n-1 ; ++i)
        for(int j = i+1 ; j < n ; ++j)
            if(v[x[i]]>v[x[j]])
            {
                int aux = x[i];
                x[i] = x[j];
                x[j] = aux;
            }
    
    int  p = 0;
    while(p<n && v[x[p]]<=T)
        T -= v[x[p++]];
    fout << p << endl;
    for(int i=0;i<p;++i)
        fout << x[i]+1 << " ";
    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 #403 Concert

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