Tutaq ki, Smeşarik nöqtəsində yerləşir. O zaman saniyə ərzində o şəkildə göstərildiyi kimi rombun istənilən tam ədədi nöqtəsinə çata bilər.
Hər bir Smeşarik üçün müvafiq ölçüdə olan rombaların bir ortaq tam ədədi nöqtəyə malik olacağı ən kiçik təbii -ni tapmaq lazımdır. Üçüncü testi nəzərdən keçirək və t = 1, 2, 3 üçün üç Smeşarikə aid rombaları təsvir edək.
t = 3 halında smeşariklər, məsələn, və ya nöqtəsində qovuşa bilər.
Koordinat sistemini mənfi bucağı qədər qaynaq nöqtesindən döndərək şəkilləndirək. Bu çevirmədə rombalar kvadratlara çevriləcək. Çevirmə düsturlarını çıxaraq:
Və ya Dekart koordinatlarında:
İrrasionalıqdan xilas olmaq üçün şəkili \sqrt{2} dəfə genişləndiririk. Bunun üçün aşağıdakı çevirmədən istifadə edək:
Üç nöqtəmizi çevirək:
(0, 0) → (0, 0)
(0, 3) → (3, 3)
(3, 3) → (6, 0)
Smeşariklərin çevrilmiş başlanğıc koordinatları olan bütün (x_i', y_i') nöqtələrini ehtiva edən düzbucaqlının koordinatlarını müəyyən edək. Mühayiyə edək:
min_x = min (x_i'); max_x = max (x_i');
min_y = min (y_i'); max_y = max (y_i');
Beləliklə, (min_x, min_y) və (max_x, max_y) əks künc nöqtələr olan düzbucaqlı bütün (x_i', y_i') nöqtələrini əhatə edəcəkdir. Hierbij is het de minimale oppervlakte van een rechthoek waarvan de zijden evenwijdig zijn met de coördinaatas.
In ons voorbeeld zal zo'n rechthoek (0, 0) - (6, 3) zijn.
Het verzamelpunt van de Smeşariks (res_x, res_y) zal het centrum van dit rechthoek zijn, oftewel het punt met coördinaten
Nu moeten we de minimale tijd vinden waarin alle Smeshari's hun punten (x_i', y_i') kunnen bereiken naar het punt (res_x, res_y). Voor de gedraaide diamant (vierkant in het nieuwe coördinatenstelsel) wordt de afstand van het punt (x_i', y_i') tot (res_x, res_y) berekend met de formule:
Op deze manier kunnen alle Smeşariks zich in het punt (res_x, res_y) verzamelen in een tijd die gelijk is aan de maximale van deze afstanden:
Alqoritmin Hazırlanması
Çarpanla dəyişənini təyin edək.
typedef lon uzun ll;
#define INFL (ll)4e18Giriş nöqtələrini massivində saxlayacağıq.
vektor<pair<ll, ll>> inp;calc funksiyası ən uzaqda olan smeşarikdən nöqtəsinə qədər olan məsafəni hesablayır. Çevrilmiş smeşarik koordinatları massivində yer alır.
ll calc(ll x, ll y)
{
ll res = 0;
for (auto p : inp)
res = max(res, max(abs(p.first - x), abs(p.second - y)));
return res;
}Proqramın əsas hissəsi. Giriş məlumatlarını oxuyuruq.
cin >> n;
minx = INFL; maxx = -INFL; miny = INFL; maxy = -INFL;
for (i = 0; i < n; i++)
{Smeşariklərin başlanğıc koordinatları oxuyuruq. Koordinat müstəvisini bucağı qədər döndəririk və alınan koordinatları massivində saxlayırıq.
cin >> x >> y;
nx = x + y;
ny = -x + y;
inp.push_back({ nx, ny });Bundan sonra smeşariklərin çevrilmiş koordinatları olan bütün (x_i', y_i') nöqtələrini ehtiva edən (min_x, min_y) və (max_x, max_y) əks künc nöqtələr olan düzbucaqlının koordinatlarını tapırıq.
minx = min(minx, nx);
maxx = max(maxx, nx);
miny = min(miny, ny);
maxy = max(maxy, ny);
}Smeşariklərin toplanacağı nöqtəni (res_x, res_y) müəyyən edirik — bu cizgiliğın mərkəzi.
resx = (minx + maxx) / 2;
resy = (miny + maxy) / 2;Bütün smeşariklərin öz nöqtələrindən (x_i', y_i') (res_x, res_y) nöqtəsinə çatması üçün lazım olan minimum vaxtı hesablayır və göstəririk.
ans = calc(resx, resy);
cout << ans << "\n";