הערה (קובץ קוד)
קובץ זה הוא קובץ קוד מסוג C.
#include <stdio.h>
#include <stdlib.h>
double pow0_5(int i)
{
if (i == 0)
{
return 0;
}
int counter = -1;
double current = i, currentHalf = i;
while (counter < currentHalf)
{
current = (current / 2) + (i / (2 * current));
counter++;
currentHalf /= 2;
}
return current;
}
int calculateLumeria(int i, int value)
{
return (int)(i * pow0_5(i)) + value;
}
int findMaxOfD(int p[], int current, int length, int distance, int *w)
{
int max = calculateLumeria(current, p[current]), maxIndex = current;
for (int i = current + 1; (i < current + distance) && (i < length); i++)
{
int lumValue = calculateLumeria(i, p[i]);
if (max < lumValue)
{
max = lumValue;
maxIndex = i;
}
}
(*w) = max;
return maxIndex;
}
int maxRobotWeight(int p[], int n, int d)
{
int maxW = calculateLumeria(0, p[0]), i = 0;
while (i < n - 1)
{
int currentMax;
i = findMaxOfD(p, i + 1, n, d, ¤tMax);
if (currentMax < maxW)
{
maxW = currentMax;
}
}
return maxW;
}
int main(void)
{
int n, d;
if (scanf("%d", &n) != 1)
{
return 1;
}
int *p = (int *) malloc(sizeof(int) * n);
if (!p)
{
return 1;
}
for (int i = 0; i < n; i++)
{
if (scanf("%d", p + i) != 1)
{
free(p);
return 1;
}
}
if (scanf("%d", &d) != 1)
{
free(p);
return 1;
}
printf("%d", maxRobotWeight(p, n, d));
free(p);
return 0;
}