fbpx

Problema #403 – Concert – Rezolvari PBInfo

de Mihai-Alexandru

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.

#include <bits/stdc++.h>

using namespace std;

ifstream cin("concert.in");
ofstream cout("concert.out");

int n , timp , s[101] , cnt;
char v[10];

struct poz
{
    int t , ind;
}x[101];

int comp(poz a , poz b)
{
    if(a.t <= b.t)return 1;
    else if(a.t == b.t && a.ind < b.ind) return 1;
    else return 0;
}

int main()
{
    cin >> n >> timp;
    for(int i = 1 ; i <= n ; i++)
    {
        cin >> v;
        int j = 0 , a = 0 , b = 0;
        while(v[j] != ':') a = a * 10 + v[j++] - '0';
        a *= 60;
        j++;
        while(v[j] != '\0') b = b * 10 + v[j++] - '0';
        a += b;
        x[i].t = a;
        x[i].ind = i;
    }
    sort(x + 1 , x + n + 1 , comp);
    int i = 1;
    while(i <= n && x[i].t <= timp)
    {
        s[++cnt] = x[i].ind;
        timp -= x[i].t;
        i++;
    }
    cout << cnt << '\n';
    for(int i = 1 ; i <= cnt ; i++)
        cout << s[i] << " ";
    return 0;
}
Comentarii

S-ar putea sa iti placa