Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <set>
- using namespace std;
- int main() {
- int m, n, e_desno, e_levo, l;
- cin >> m >> n >> e_desno >> e_levo >> l;
- set<int> b;
- for (int i = 0; i < l; ++i) {
- int x;
- cin >> x;
- b.insert(x);
- }
- set<int>::iterator vesna = b.find(m), krste = b.find(n);
- bool nemaStanicaV = vesna == b.end(), nemaStanicaK = krste == b.end();
- if (nemaStanicaV) {
- b.insert(m);
- vesna = b.find(m);
- }
- if (nemaStanicaK) {
- b.insert(n);
- krste = b.find(n);
- }
- set<int>::iterator desno = next(vesna), levo = prev(vesna), desno_k = next(krste), levo_k = prev(krste);
- if (desno_k == vesna && nemaStanicaV) {
- desno_k = next(desno_k);
- }
- if (levo_k == vesna && nemaStanicaV) {
- levo_k = prev(krste);
- if (levo_k == krste) {
- levo_k = b.end();
- }
- }
- int e = 0; //energija potrosena= vesna ? 1
- bool vozi = !nemaStanicaV; //dali se vozi vo avtobus
- int r_k = 100001;
- while (vesna != krste && r_k > 0) {
- int r_l = *vesna - *levo, r_d = *desno - *vesna;
- r_k = (*vesna > *krste) ? *vesna - *krste : *krste - *vesna;
- r_l = r_l <= 0 ? 100001 : r_l;
- r_d = r_d <= 0 ? 100001 : r_d;
- //cout << "vesna:" << *vesna << " r_k:" << r_k << " r_l:" << r_l << " r_d:" << r_d << endl;
- if (l < 2) {
- e += (*vesna > *krste) ? (*vesna - *krste) * e_levo : (*krste - *vesna) * e_desno;
- break;
- } else if ((levo == krste || desno == krste) && (r_k <= r_l) && (r_k <= r_d)) {
- if (nemaStanicaK) {
- e += (levo == krste) ? (*vesna - *krste) * e_levo : (*krste - *vesna) * e_desno;
- //cout << "\totidovme kaj krste i potrosivme energija: " << ((levo == krste) ? (*vesna - *krste) * e_levo : (*krste - *vesna) * e_desno) << endl;
- }
- vesna = krste;
- } else {
- if (!vozi) {
- int el = r_l * e_levo, ed = r_d * e_desno;
- e += el < ed ? el : ed;
- vozi = true;
- //cout << "\totidovme " << (el<ed?"levo":"desno") << " i potrosivme energija: " << (el < ed ? el : ed) << endl;
- }
- if (!nemaStanicaK) {
- vesna = krste;
- //cout << "\totidovme kaj krste so avtobus";
- } else {
- int k_r_l = *krste - *levo_k, k_r_d = *desno_k - *krste;
- vesna = (k_r_l < k_r_d) ? levo_k : desno_k;
- //cout << "\tk_r_l:" << k_r_l << " k_r_d:" << k_r_d << endl;
- }
- }
- //cout << "\tvesna e sega na " << *vesna << endl;
- levo = prev(vesna);
- desno = next(vesna);
- if (desno == b.end()) {
- desno = prev(desno);
- }
- }
- cout << e;
- }
Advertisement
Add Comment
Please, Sign In to add comment