#include <stdio.h>
#include <stdlib.h>
struct PetrolPumpData
{
int petrol;
int distance;
};
/*It returns -1 if there is no possible tour*/
int getStartPointOfTour(struct PetrolPumpData arr[], int n)
{
int start_point = 0;
int end_point = 1;
int curr_petrol = arr[start_point].petrol - arr[start_point].distance;
while (end_point != start_point || curr_petrol < 0)
{
/*If the curr_petrol becomes less than zero then remove the starting point of the pump tour*/
while (curr_petrol < 0 && start_point != end_point)
{
curr_petrol = curr_petrol - (arr[start_point].petrol - arr[start_point].distance);
start_point = (start_point + 1)%n;
if (start_point == 0)
return -1;
}
/*Add petrol pump data to current petrol*/
curr_petrol = curr_petrol + arr[end_point].petrol - arr[end_point].distance;
end_point = (end_point + 1)%n;
}
return start_point;
}
int main()
{
struct PetrolPumpData arr[] = {{4, 6}, {6, 5}, {7, 3}, {4, 5}};
int result = getStartPointOfTour(arr,4);
if(result == -1)
else
printf("start point of the tour is %d\n", result
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KIApzdHJ1Y3QgUGV0cm9sUHVtcERhdGEKewogIGludCBwZXRyb2w7CiAgaW50IGRpc3RhbmNlOwp9OwoKLypJdCByZXR1cm5zIC0xIGlmIHRoZXJlIGlzIG5vIHBvc3NpYmxlIHRvdXIqLwppbnQgZ2V0U3RhcnRQb2ludE9mVG91cihzdHJ1Y3QgUGV0cm9sUHVtcERhdGEgYXJyW10sIGludCBuKQp7CiAgICBpbnQgc3RhcnRfcG9pbnQgPSAwOwogICAgaW50IGVuZF9wb2ludCA9ICAxOwoKICAgIGludCBjdXJyX3BldHJvbCA9IGFycltzdGFydF9wb2ludF0ucGV0cm9sIC0gYXJyW3N0YXJ0X3BvaW50XS5kaXN0YW5jZTsKCiAgICB3aGlsZSAoZW5kX3BvaW50ICE9IHN0YXJ0X3BvaW50IHx8IGN1cnJfcGV0cm9sIDwgMCkKICAgIHsKICAgICAgICAvKklmIHRoZSBjdXJyX3BldHJvbCBiZWNvbWVzIGxlc3MgdGhhbiB6ZXJvIHRoZW4gcmVtb3ZlIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgcHVtcCB0b3VyKi8KICAgICAgICB3aGlsZSAoY3Vycl9wZXRyb2wgPCAwICYmIHN0YXJ0X3BvaW50ICE9IGVuZF9wb2ludCkKICAgICAgICB7CiAgICAgICAgICAgIGN1cnJfcGV0cm9sID0gY3Vycl9wZXRyb2wgLSAoYXJyW3N0YXJ0X3BvaW50XS5wZXRyb2wgLSBhcnJbc3RhcnRfcG9pbnRdLmRpc3RhbmNlKTsKICAgICAgICAgICAgc3RhcnRfcG9pbnQgPSAoc3RhcnRfcG9pbnQgKyAxKSVuOwogICAgICAgICAgICBpZiAoc3RhcnRfcG9pbnQgPT0gMCkKICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICAvKkFkZCBwZXRyb2wgcHVtcCBkYXRhIHRvIGN1cnJlbnQgcGV0cm9sKi8KICAgICAgICBjdXJyX3BldHJvbCA9IGN1cnJfcGV0cm9sICsgYXJyW2VuZF9wb2ludF0ucGV0cm9sIC0gYXJyW2VuZF9wb2ludF0uZGlzdGFuY2U7CiAgICAgICAgZW5kX3BvaW50ID0gKGVuZF9wb2ludCArIDEpJW47CiAgICB9CiAgICByZXR1cm4gc3RhcnRfcG9pbnQ7Cn0KIAppbnQgbWFpbigpCnsKICAgIHN0cnVjdCBQZXRyb2xQdW1wRGF0YSBhcnJbXSA9IHt7NCwgNn0sIHs2LCA1fSwgezcsIDN9LCB7NCwgNX19OwogICAgaW50IHJlc3VsdCA9IGdldFN0YXJ0UG9pbnRPZlRvdXIoYXJyLDQpOwogICAgaWYocmVzdWx0ID09IC0xKQogICAgcHJpbnRmKCJObyBQb3NzaWJsZSB0b3VyXG4iKTsKICAgIGVsc2UKICAgIHByaW50Zigic3RhcnQgcG9pbnQgb2YgdGhlIHRvdXIgaXMgJWRcbiIsIHJlc3VsdCk7CiAgICByZXR1cm4gMDsKfQo=