Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <string.h>
- #include <math.h>
- #include <limits.h>
- int Parent(i) {
- return i / 2;
- }
- int Left(i) {
- return 2 * i + 1;
- }
- int Right(i) {
- return 2 * i + 2;
- }
- void pref_in(int number_parent, int* arr_medium, int maX, int* medium) {
- int child = Left(number_parent);
- if (child < maX)
- if (arr_medium[child] != INT_MIN) {
- int razn = arr_medium[child] + arr_medium[number_parent];
- if (abs(razn) < (*medium))
- *medium = abs(razn);
- pref_in(child, arr_medium, maX, medium);
- }
- child = Right(number_parent);
- if (child < maX)
- if (arr_medium[child] != INT_MIN) {
- int razn = arr_medium[child] + arr_medium[number_parent];
- if (abs(razn) < (*medium))
- *medium = abs(razn);
- pref_in(child, arr_medium, maX, medium);
- }
- }
- void pref(int number_parent, int* arr, int maX, int* arr_medium) {
- int child = Left(number_parent);
- if (child < maX)
- if (arr[child] != INT_MIN) {
- arr_medium[child] = arr[child] - arr[number_parent];
- pref(child, arr, maX, arr_medium);
- }
- else {
- arr_medium[child] = INT_MIN;
- }
- child = Right(number_parent);
- if (child < maX)
- if (arr[child] != INT_MIN) {
- arr_medium[child] = arr[child] - arr[number_parent];
- pref(child, arr, maX, arr_medium);
- }
- else {
- arr_medium[child] = INT_MIN;
- }
- }
- int main() {
- FILE* F = fopen("input.txt", "r");
- int h;
- fscanf(F, "%d ", &h);
- int maX = pow(2, h + 1) - 1;
- int* tree = (int*)malloc(sizeof(int) * maX);
- char temp[13];
- int i = 0;
- int flag = 0;
- while (fscanf(F, "%s", temp) != EOF) {
- int lenght = strlen(temp);
- if (temp[0] == '-') {
- flag = 1;
- if (lenght == 1) {
- tree[i] = INT_MIN;
- flag = 0; i++;
- continue;
- }
- }
- int value = 0;
- for (int j = 0; j < lenght; j++) {
- if (temp[j] == '-')
- continue;
- value = value * 10 + (temp[j] - '0');
- }
- if (flag)
- value *= -1;
- tree[i] = value;
- i++;
- flag = 0;
- }
- int medium = INT_MAX;
- int* sum = (int*)calloc(maX, sizeof(int));
- pref(0, tree, maX, sum);
- pref_in(0, sum, maX, &medium);
- free(tree);
- free(sum);
- FILE* out = fopen("output.txt", "w");
- fprintf(out, "%d", medium);
- fclose(out);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement