#2537
În Piatra Neamț sunt N+2 locații numerotate de la 0 la N+1, de la stânga la dreapta. Distanța dintre două locații i si j este egală cu |i – j|. La început, în locațiile 0 și N+1, sunt construite benzinării, și în celelalte locații sunt case. Compania BuildNT a decis sa construiască N benzinării, una în fața fiecărei case.
Înainte să construiască o benzinărie, constructorii calculează valoarea S egală cu suma distanțelor de la fiecare casă la cea mai apropiată benzinărie, si adaugă această sumă la suma totală T. După, ei aleg o casă, la cea mai mare distanță de orice benzinărie, în fața căreia construiesc o nouă benzinărie. Casele sunt alese în așa fel încât, după construirea benzinăriilor, valoarea S recalculată sa fie minimă. Dacă sunt mai multe case ce respectă această regulă, se alege prima din stânga.
Desigur, după ce toate benzinăriile au fost construite, suma S va deveni 0 și suma totală T nu se va mai schimba.
Calculați T pentru o valoare dată N.
Olimpiada internațională pe Echipe, 2018
| Problema | Benzinarii1 | Operații I/O |
tastatură/ecran
|
|---|---|---|---|
| Limita timp | 0.1 secunde | Limita memorie |
Total: 64 MB
/
Stivă 8 MB
|
| Id soluție | #58737086 | Utilizator | |
| Fișier | benzinarii1.cpp | Dimensiune | 3.65 KB |
| Data încărcării | 28 Iulie 2025, 19:37 | Scor/rezultat | Eroare de compilare |
benzinarii1.cpp:12:44: error: '__int128_t' has not been declared std::ostream& operator<<(std::ostream& os, __int128_t val) { ^ benzinarii1.cpp:31:1: error: '__int128_t' does not name a type __int128_t calculate_s_for_segment(long long L) { ^ benzinarii1.cpp: In function 'int main()': benzinarii1.cpp:52:5: error: '__int128_t' was not declared in this scope __int128_t total_t = 0; ^ benzinarii1.cpp:52:16: error: expected ';' before 'total_t' __int128_t total_t = 0; ^ benzinarii1.cpp:73:20: error: expected ';' before 's_current' __int128_t s_current = 0; ^ benzinarii1.cpp:77:13: error: 's_current' was not declared in this scope s_current += (__int128_t)num * calculate_s_for_segment(len); ^ benzinarii1.cpp:77:38: error: expected ';' before 'num' s_current += (__int128_t)num * calculate_s_for_segment(len); ^ benzinarii1.cpp:75:23: warning: unused variable 'len' [-Wunused-variable] long long len = map_it->first; ^ benzinarii1.cpp:76:23: warning: unused variable 'num' [-Wunused-variable] long long num = map_it->second; ^ benzinarii1.cpp:83:20: error: expected ';' before 'reduction_per_split' __int128_t reduction_per_split = calculate_s_for_segment(L_max) - calculate_s_for_segment(L1) - calculate_s_for_segment(L2); ^ benzinarii1.cpp:87:20: error: expected ';' before 'sum_to_add' __int128_t sum_to_add = (__int128_t)k * s_current; ^ benzinarii1.cpp:89:13: error: 'sum_to_add' was not declared in this scope sum_to_add -= reduction_per_split * (__int128_t)k * (k - 1) / 2; ^ benzinarii1.cpp:89:27: error: 'reduction_per_split' was not declared in this scope sum_to_add -= reduction_per_split * (__int128_t)k * (k - 1) / 2; ^ benzinarii1.cpp:89:61: error: expected ';' before 'k' sum_to_add -= reduction_per_split * (__int128_t)k * (k - 1) / 2; ^ benzinarii1.cpp:91:9: error: 'total_t' was not declared in this scope total_t += sum_to_add; ^ benzinarii1.cpp:91:20: error: 'sum_to_add' was not declared in this scope total_t += sum_to_add; ^ benzinarii1.cpp:111:18: error: 'total_t' was not declared in this scope std::cout << total_t << std::endl; ^
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema Benzinarii1 face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.