Informatică, întrebare adresată de NinjaHyper11, 8 ani în urmă

În vacanţă programul este mai lejer. În fiecare zi profesorii vin la şcoală într-un interval orar fixat de ei, acelaşi în fiecare zi. Directorul şcolii ar dori să stabilească consiliul profesoral în una dintre zile, într-un interval orar în care toţi profesorii sunt în şcoală. Cerinţă Cunoscând programul fiecărui profesor din şcoală, determinaţi cât timp (pe parcursul a 24 de ore) se află simultan în şcoală toţi profesorii. Date de intrare Fişierul de intrare consiliu.in conţine pe prima linie un număr natural N, reprezentând numărul de profesori din şcoală. Pe fiecare dintre următoarele N linii sunt scrise câte 4 numere naturale separate prin spaţii hs ms hf mf, unde hs ms reprezintă ora şi minutul la care un profesor soseşte în şcoală (deci la ora hs:ms profesorul este deja în şcoală), iar hf mf ora şi minutul la care profesorul pleacă din şcoală (deci la ora hf:mf profesorul nu mai este în şcoală). Date de ieşire Fişierul de ieşire consiliu.out va conţine o singură linie pe care va fi scris un număr nat


NinjaHyper11: daca va ganditi la ea sa imi ziceti
NinjaHyper11: @petrucinator si @boiustef
NinjaHyper11: pls

Răspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("consiliu.in");

ofstream g("consiliu.out");

int a,b,n,hs,ms,hf,mf,i,j, v[1440];

int main()

{

   f >> n;

   f >> hs >> ms >> hf >> mf;

   a=hs*60+ms; b=hf*60+mf;

   if (a==b) {for (i=0; i<1439; i++) v[i]=1;}

   if (a<b) {for (i=a; i<b; i++) v[i]=1; }

   if (a>b) {

       for (i=a; i<=1439; i++) v[i]=1;

       for (i=0; i<b; i++) v[i]=1;

   }

   for (j=2; j<=n; j++) {

       f >> hs >> ms >> hf >> mf;

       a=hs*60+ms; b=hf*60+mf;

       if (a==b) {

           for (i=0; i<1439; i++) v[i]=1*v[i];

       }

       if (a<b) {

           for (i=a; i<b; i++) v[i]=1*v[i];

           for (i=0; i<a; i++) v[i]=0;

           for (i=b; i<=1439; i++) v[i]=0;

       }

       if (a>b) {

           for (i=a; i<=1439; i++) v[i]=1*v[i];

           for (i=0; i<b; i++) v[i]=1*v[i];

           for (i=b; i<a; i++) v[i]=0;

       }

   }

   int s=0;

   for (i=0; i<=1439; i++) {

       s=s+v[i];

   }

   g << s;

   return 0;

}

Explicație:

Deci, am folosit un vector caracteristic a minutelor, scriind în vector 1 dacă profesorul e la serviciu și 0 în caz contrar în minuta respectivă.

Astfel după citirea datelor și înregistrarea respectivă în vectorul caracteristic, suma unităților din vector va și reprezenta rezultatul...

Nu sunt sigur dacă codul va rezista condițiilor de timp și memorie la evaluare pe careva site (varena sau ...), de altfel dă rezultat corect... se pare .. :))) Sper să fie clară logica codului...

Succese! .

Anexe:
Alte întrebări interesante