#include <iostream>
using namespace std;
// The function returns starting point if there is a possible solution, otherwise returns -1
int findStartingGasStation(int g[], int c[],int n)
{
// Considering first gas station as a starting point
int start = 0;
int end = 1;
int curr_fuel = g[start] - c[start];
/* Now we run a loop while all gas stations are not visited And we have reached start gas station again with 0 or more petrol */
while (end != start || curr_fuel < 0)
{
// If current amount of gas in car becomes less than 0, then we remove the starting gas station from tour
while (curr_fuel < 0 && start != end)
{
// Removing starting gas station's gas and adding it's cost.
curr_fuel -= g[start] - c[start];
start = (start + 1) % n; // Changing start
// If 0 is being considered as start again, then there is no possible solution
if (start == 0)
return -1;
}
// Adding a gas station to current tour
curr_fuel += g[end] - c[end];
end = (end + 1) % n; // updating the end station
}
// Returning starting point
return start;
}
int main(){
int g[]={6,3,7};
int c[]={4,6,3};
int n = sizeof(g)/sizeof(g[0]);
cout << "Fuel and Cost for each gas station:" << endl;
for (int i = 0; i < n; ++i)
{
cout << "Station " << i << ": Fuel = " << g[i] << ", Cost = " << c[i] << endl;
}
int start = findStartingGasStation(g, c, n);
(start == -1)? cout<<"No solution": cout<<"Starting Gas Station = "<<start;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOyAKCi8vIFRoZSBmdW5jdGlvbiByZXR1cm5zIHN0YXJ0aW5nIHBvaW50IGlmIHRoZXJlIGlzIGEgcG9zc2libGUgc29sdXRpb24sIG90aGVyd2lzZSByZXR1cm5zIC0xIAppbnQgZmluZFN0YXJ0aW5nR2FzU3RhdGlvbihpbnQgZ1tdLCBpbnQgY1tdLGludCBuKSAKeyAKCS8vIENvbnNpZGVyaW5nIGZpcnN0IGdhcyBzdGF0aW9uIGFzIGEgc3RhcnRpbmcgcG9pbnQgCglpbnQgc3RhcnQgPSAwOyAKCWludCBlbmQgPSAxOyAKCglpbnQgY3Vycl9mdWVsID0gZ1tzdGFydF0gLSBjW3N0YXJ0XTsgCgoJLyogTm93IHdlIHJ1biBhIGxvb3Agd2hpbGUgYWxsIGdhcyBzdGF0aW9ucyBhcmUgbm90IHZpc2l0ZWQgQW5kIHdlIGhhdmUgcmVhY2hlZCBzdGFydCBnYXMgc3RhdGlvbiBhZ2FpbiB3aXRoIDAgb3IgbW9yZSBwZXRyb2wgKi8KCXdoaWxlIChlbmQgIT0gc3RhcnQgfHwgY3Vycl9mdWVsIDwgMCkgCgl7IAoJCS8vIElmIGN1cnJlbnQgYW1vdW50IG9mIGdhcyBpbiBjYXIgYmVjb21lcyBsZXNzIHRoYW4gMCwgdGhlbiB3ZSByZW1vdmUgdGhlIHN0YXJ0aW5nIGdhcyBzdGF0aW9uIGZyb20gdG91ciAKCQl3aGlsZSAoY3Vycl9mdWVsIDwgMCAmJiBzdGFydCAhPSBlbmQpIAoJCXsgCgkJCS8vIFJlbW92aW5nIHN0YXJ0aW5nIGdhcyBzdGF0aW9uJ3MgZ2FzIGFuZCBhZGRpbmcgaXQncyBjb3N0LiAgCgkJCWN1cnJfZnVlbCAtPSBnW3N0YXJ0XSAtIGNbc3RhcnRdOyAKCQkJc3RhcnQgPSAoc3RhcnQgKyAxKSAlIG47ICAgLy8gQ2hhbmdpbmcgc3RhcnQKCgkJCS8vIElmIDAgaXMgYmVpbmcgY29uc2lkZXJlZCBhcyBzdGFydCBhZ2FpbiwgdGhlbiB0aGVyZSBpcyBubyBwb3NzaWJsZSBzb2x1dGlvbiAKCQkJaWYgKHN0YXJ0ID09IDApIAoJCQlyZXR1cm4gLTE7IAoJCX0gCgoJCS8vIEFkZGluZyBhIGdhcyBzdGF0aW9uIHRvIGN1cnJlbnQgdG91ciAKCQljdXJyX2Z1ZWwgKz0gZ1tlbmRdIC0gY1tlbmRdOyAKCgkJZW5kID0gKGVuZCArIDEpICUgbjsgLy8gdXBkYXRpbmcgdGhlIGVuZCBzdGF0aW9uCgl9IAoKCS8vIFJldHVybmluZyBzdGFydGluZyBwb2ludCAKCXJldHVybiBzdGFydDsgCn0gCgppbnQgbWFpbigpewogICAgaW50IGdbXT17NiwzLDd9OwogICAgaW50IGNbXT17NCw2LDN9OyAgCiAgICBpbnQgbiA9IHNpemVvZihnKS9zaXplb2YoZ1swXSk7CiAgICBjb3V0IDw8ICJGdWVsIGFuZCBDb3N0IGZvciBlYWNoIGdhcyBzdGF0aW9uOiIgPDwgZW5kbDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgIlN0YXRpb24gIiA8PCBpIDw8ICI6IEZ1ZWwgPSAiIDw8IGdbaV0gPDwgIiwgQ29zdCA9ICIgPDwgY1tpXSA8PCBlbmRsOwogICAgICAgIH0KIAoJaW50IHN0YXJ0ID0gZmluZFN0YXJ0aW5nR2FzU3RhdGlvbihnLCBjLCBuKTsgCgoJKHN0YXJ0ID09IC0xKT8gY291dDw8Ik5vIHNvbHV0aW9uIjogY291dDw8IlN0YXJ0aW5nIEdhcyBTdGF0aW9uID0gIjw8c3RhcnQ7IAoKCXJldHVybiAwOyAKfSA=