Pokušao sam da rešim sledeći zadatak medjutim nisam uspeo i imam nekoliko pitanja:
Zašto su mi testcases uglavnom TLE ?
Kako da uspešno rešim zadatak ?
Kako da napravim matricu koja ispunjava ograničenja ?
Kako da proverim da li je moj algoritam validan i odredim njegovu složenost ? ( I na osnovu nje uvidim da li će ispuniti vremensko ograničenje)
Ovo je kod: #include iostream // znakovi < i > su prisutni #include vector
using namespace std;
int main()
{
vector Redovi;
vector Kolone;
int DimenzijaN;
int BrojPocKrompiraM;
cin >> DimenzijaN >> BrojPocKrompiraM;
int PoljeKrompira[505][505];
for (int i = 0; i < DimenzijaN; ++i)
{
for (int j = 0; j < DimenzijaN; ++j)
{
PoljeKrompira[i][j] = 0;
}
}
for (int i = 0; i < BrojPocKrompiraM; ++i)
{
int x, y;
cin >> x;
cin >> y;
PoljeKrompira[x-1][y-1] = 1;
}
int predhodni=-1;
int predhodni2 = -1;
for (int i = 0; i < DimenzijaN; ++i) // for every column do few rows
{
for (int j = 0; j < DimenzijaN; ++j) //
{
if ((PoljeKrompira[i][j] == 1) && (j > predhodni))
{
Redovi.push_back(j);
predhodni = j;
}
if ((PoljeKrompira[i][j] == 1) && (i > predhodni2))
{
Kolone.push_back(i);
predhodni2 = i;
}
}
}
cout << Redovi.size()*DimenzijaN + Kolone.size()*(DimenzijaN - Redovi.size());
return 0;
Nisam siguran sta se desava ovde tacno, vidim da si na kraju shvatio sta je resenje.
Prebroj koliko imas razlicitih redova i kolona i resenje je ovo sto si napisao. rn + k(n-r)
Kao prvo, TLE dobijas jer ti je slozenost resenja O(N^2). To je zato sto imas petlju u petlji, koje obe idu do N,pa ti je slozenost N * N, a N <= 10^6. To bi vec za N nesto vece od 10000 probijalo ogranicenje.
Takodje, ne mozes napraviti matricu od 10^6 * 10^6.
E sad, ovako sam ja radio,mislim da je ovalo dosta lakse:
Znamo da ce u svakoj koloni i redu u kojoj postoji bar jedno pocetno polje izrasti krompiri. Zato prakticno mozemo posmatrati poziciju pocetnog polja koju dobijemo u inputu kao broj kolone u kojoj ce na svim poljima izrasti krompiri, i broj vrste u kojoj ce na svim poljima izrasti krompiri. Izacunacemo broj polja na kojima krompir nije porastao, kao (broj_nespomenutih_kolona) * (broj_nespomenutih_vrsti). To je tacno jer ce u preseku svake kolone i vrste u kojima ne postoji ni jedno pocetno polje biti jedno prazno polje(bez krompira). Zatim samo oduzmemo dobijeni broj od ukupnog broja polja, i dobili smo resenje.
Pojasnio si mi zadatak i složenost algoritma, izgleda da sam inpute nepotrebno učitavao u matricu i zatim ih čitao iz nje. U svakom slučaju imam odgovore na pitanja, hvalaa