Skip to content

Instantly share code, notes, and snippets.

@Florian3k
Created November 26, 2017 13:26
Show Gist options
  • Save Florian3k/192f40a67290d5ef9e716fd7d2dec914 to your computer and use it in GitHub Desktop.
Save Florian3k/192f40a67290d5ef9e716fd7d2dec914 to your computer and use it in GitHub Desktop.
void calcDelivery(int stock[], int demand[], int n)
{
int begin = 0;
int end = 0;
int deficit = 0;
for (int i = 0; i < n; ++i) {
int diff = stock[i] - demand[i];
if ( deficit == 0 ) {
if ( diff > 0 ) { // nadwyżka, przesuwamy ją dalej
transport( i, i + 1, diff );
stock[i+1] += diff; // nie musimy zmniejszać w stock[i], nie będzie to już brane pod uwagę
} else if ( diff < 0 ) { // zaczynamy naliczać deficyt
begin = i;
deficit += -diff;
} //else: nic, idziemy dalej
} else {
deficit += -diff;
if ( deficit <= 0 ) { // zlikwidowaliśmy deficyt
if ( deficit < 0 ) { // zlikwidowaliśmy deficyt, i mamy nadwyżkę - przesuwamy ją w prawo
diff = -deficit;
transport( i, i + 1, diff );
stock[i] -= diff;
stock[i+1] += diff;
}
end = i;
for (int j = end; j > begin; --j) { // przesuwamy szczepionki w lewo, od end aż do begin
diff = stock[j] - demand[j]; // aktualizujemy ilośc do przeniesienia
transport( j, j - 1, diff );
stock[j-1] += diff; // nie msimy zmniejszać w stock[j], nie będzie to już brane pod uwagę
}
} //else: nadal deficyt, idziemy w prawo
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment