Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdint.h>
- #define MAX(x, y) (((x) > (y)) ? (x) : (y))
- #define MIN(x, y) (((x) > (y)) ? (y) : (x))
- int main()
- {
- int64_t a, data;
- scanf("%lld", &a);
- int64_t tab[a];
- int64_t dist_forward[a];
- int64_t dist_backward[a];
- int64_t result[a -1];
- for(int64_t i = 0; i < a; i++)
- {
- scanf("%lld", &data);
- tab[i] = data;
- }
- int64_t sum = 0;
- dist_forward[0] = 0;
- for(int64_t i = 0; i < a; i++)
- {
- if (i == 0) {
- dist_forward[i] =0;
- continue;
- }
- sum += tab[i - 1];
- dist_forward[i] = sum;
- }
- sum = 0;
- dist_backward[0] = 0;
- for(int64_t i = a-1; i > 0; i--)
- {
- sum += tab[i];
- dist_backward[i] = sum;
- }
- int64_t x = 0;
- int64_t y = 1;
- int64_t max_dist = 0;
- int64_t curr_dist = 0;
- int64_t next_dist = 0;
- while(y != x)
- {
- //printf("%d %d\n", x, y);
- curr_dist = MIN(
- MIN(abs(dist_forward[y] - dist_forward[x]),
- abs(dist_forward[y] + dist_backward[x])),
- MIN(abs(dist_backward[y] + dist_forward[x]),
- abs(dist_backward[y] - dist_backward[x])));
- next_dist = MIN( MIN(abs(dist_forward[y + 1] - dist_forward[x]), abs(dist_forward[y + 1] + dist_backward[x])), MIN(abs(dist_backward[y + 1] + dist_forward[x]), abs(dist_backward[y + 1] - dist_backward[x])));
- //printf("Curr dist: %lld\n", curr_dist);
- //printf("Next dist: %lld\n", next_dist);
- if(y == (a - 1))
- {
- x++;
- }
- else
- {
- if( next_dist >= curr_dist)
- {
- y++;
- }
- else
- {
- x++;
- }
- }
- max_dist = MAX(max_dist, curr_dist);
- }
- //printf("\n%d %d\n", x, y);
- //printf("\nMax distance: %d\n", max_dist);
- printf("%lld", max_dist);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement