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 ≤ 1001 ≤ T ≤ 10000 ≤ m ≤ 100 ≤ 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
.
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!