Comisia Naţională a Audiovizualului (CNA) este autoritatea care coordonează activitatea posturilor media din România. Șeful CNA-ului dorește o statistică referitoare la publicitatea transmisă de posturile de televiziune. În acest scop, el primește pentru fiecare zi informații în următorul format: d hh:mm:ss
, unde d
este durata exprimată în secunde a publicității, iar hh:mm:ss
este momentul de start al publicității (hh
este ora, mm
este minutul, iar ss
este secunda). Observaţi că d
este separat de hh
printr-un singur spaţiu, iar următoarele valori sunt separate prin caracterul ':'
.
De exemplu o linie de forma:
150 05:02:45
se interpretează astfel: există un post TV care a transmis publicitate cu durata de 150
secunde, ora de început fiind 5
, 2
minute și 45
de secunde.
”Secunda de aur” este o secundă în care se difuzează cât mai multă publicitate, adică pe un număr maxim de posturi în acea secundă se transmite publicitate. Dacă sunt mai multe astfel de secunde, “secunda de aur” este considerată prima secundă cu această proprietate în derularea zilei.
Șeful CNA primește în fiecare dimineață lista cu activitatea din ziua anterioară ca o succesiune de linii, fiecare linie având forma descrisă mai sus.
Cerinţe
Scrieţi un program care, cunoscând lista din ziua anterioară, să rezolve următoarele cerinţe:
- să determine durata totală în care niciun post de televiziune nu a difuzat publicitate;
- să determine care este “secunda de aur”.
Date de intrare
Fişierul de intrare tv.in
conţine pe prima linie numărul natural c
, care poate fi 1
sau 2
, reprezentând cerinţa care urmează să fie rezolvată. Pe a doua linie se află numărul natural N
, reprezentând numărul de linii din lista cu informații primită de șef. Pe următoarele N
linii sunt descrise informațiile, în formatul specificat în enunţ.
Date de ieșire
Fişierul de ieşire tv.out
va conţine o singură linie pe care vor fi scrise 3
numere naturale separate prin caracterul ':'
în formatul următor:
hh:mm:ss
semnificând durata totală exprimată în ore (hh
), minute (mm
) şi secunde (ss
) pe parcursul căreia niciun post de televiziune nu a difuzat publicitate în ziua respectivă (dacă c=1
), respectiv “secunda de aur” (dacă c=2
).
Restricții și precizări
1 ≤ N ≤ 100000
hh
va fi un număr de exact două cifre, cuprins între00
şi23
mm
, respectivss
vor fi numere de exact două cifre, cuprinse între00
şi59
- Durata
d
este nenulă şi sfârşitul transmisiei publicităţii se află în cadrul zilei curente. - Pentru teste valorând 60% din punctaj cerinţa este 1.
Exemplul 1
tv.in
1 6 120 12:00:00 200 12:01:50 1000 13:00:00 2000 13:01:00 100 14:05:05 10 23:59:49
tv.out
23:18:40
Exemplul 2
tv.in
2 6 1200 12:00:00 2000 12:01:50 1000 12:00:00 2000 13:01:00 100 14:05:05 10 23:59:49
tv.out
12:01:50
Explicații
Pentru exemplul 1
, cerinţa este 1
. Pe parcursul zilei, timp de 23
de ore, 18
minute şi 40
de secunde nu s-a difuzat publicitate. Pentru exemplul 2
, cerinţa este 2
. Secunda de aur este 12:01:50
pentru că există un număr maxim posturi care difuzează publicitate (3
posturi).
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 TV:
//Octavian Dumitrascu - 100 puncte
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int sf, liber, yy, m1, s1, h1, d, c, ss, n, ma, p, timp, start, stop, i, h[100005];
char s[10];
int main()
{
freopen("tv.in", "r", stdin);
freopen("tv.out", "w", stdout);
scanf("%d\n%d\n", &p, &n);
for (i=1; i<=n; i++)
{
scanf("%d ",&d);
gets(s);
h1=(s[0]-48)*10+s[1]-48;
m1=(s[3]-48)*10+s[4]-48;
s1=(s[6]-48)*10+s[7]-48;
start = s1 + m1*60 + h1*60*60;
stop = start + d;
h[start]++;
h[stop]--;
}
ss = 0;
liber = 0;
ma = 0;
for (i = 0; i < 60*60*24; i++)
{
ss += h[i];
if (ss > ma) {ma = ss; timp = i;}
if (ss == 0) liber++;
}
if (p == 1) yy = liber;
else yy = timp;
strcpy(s,"");
h1 = yy/3600;
m1 = yy%3600/60;
s1 = yy%60;
s[0]=h1/10+48;
s[1]=h1%10+48;
s[2]=':';
s[3]=m1/10+48;
s[4]=m1%10+48;
s[5]=':';
s[6]=s1/10+48;
s[7]=s1%10+48;
s[8]='\0';
printf("%s\n", s);
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 #1222 TV
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1222 TV 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!