Potrebno je ucitati N (0 < N <= 10000) brojeva koji u zadatku predstavljaju broj "ljudi" a zatim u narednih N linija nalaze se dva broja A[j] i B[j], gde A[j] prestavlja interval u opsegu [1..1000000] kada je osoba dosla na "zurku" a B[j] interval kada je osoba otisla za zurke.
Na standardni izlaz ispisati jedan broj, maksimalan broj ljudi koji je u istom intervalu (trenutku) bio na zurci.
Vremensko Ogranicenje : 1 sekunda
E sad, ja sam to resio tako sto sam medju ulaznim vrednostima prvo pronasao minimalni i maximalni element, i oni predstavljaju uslov izvrsavanja petlje,tj. ponavljanje petlje se izvrsava dok je max > min. A zatim deklarisao sam dva brojaca: prvi se inkrementira u slucaju da je (i >= a[j] and i <= b[j]) uslov ispunjen, to jest ako je trenutna vrednost u intervalu a[j] i b[j], a zatim se u drugom brojacu pamti najveca vrednost prvog brojaca kako bi se znao najveci broj ljudi koji je bio prisutan u istom trenutku.
Evo kod:
Code:
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int a[n],b[n];
int min,max;
for (int i = 0; i < n; i++)
{
cin >> a[i] >> b[i];
if (i == 0)
min = a[0],max = b[0];
else
{
if (min > a[i])
min = a[i];
if (max < b[i])
max = b[i];
}
}
int br1 = 0,br2 = 0;
for (int i = min; i < max; i++,br1 = 0)
{
for (int j = 0; j < n; j++)
if (i >= a[j] and i <= b[j])
br1++;
if (br1 > br2)
br2 = br1;
}
cout << br2;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int a[n],b[n];
int min,max;
for (int i = 0; i < n; i++)
{
cin >> a[i] >> b[i];
if (i == 0)
min = a[0],max = b[0];
else
{
if (min > a[i])
min = a[i];
if (max < b[i])
max = b[i];
}
}
int br1 = 0,br2 = 0;
for (int i = min; i < max; i++,br1 = 0)
{
for (int j = 0; j < n; j++)
if (i >= a[j] and i <= b[j])
br1++;
if (br1 > br2)
br2 = br1;
}
cout << br2;
return 0;
}
Tacna su resenja, ali problem je sto program prelazi vremensko ogranicenje.
Ima li neko ideju kako ovo da se resi na drugaciji nacin, tako da se kod optimizuje??