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 .
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!