Advertisement
supprucha

Untitled

Jun 2nd, 2023
1,143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.64 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include <limits.h>
  6.  
  7. int Parent(i) {
  8.     return i / 2;
  9. }
  10. int Left(i) {
  11.     return 2 * i + 1;
  12. }
  13.  
  14. int Right(i) {
  15.     return 2 * i + 2;
  16. }
  17.  
  18.  
  19. void pref_in(int number_parent, int* arr_medium, int maX, int* medium) {
  20.     int child = Left(number_parent);
  21.     if (child < maX)
  22.         if (arr_medium[child] != INT_MIN) {
  23.             int razn = arr_medium[child] + arr_medium[number_parent];
  24.             if (abs(razn) < (*medium))
  25.                 *medium = abs(razn);
  26.             pref_in(child, arr_medium, maX, medium);
  27.         }
  28.     child = Right(number_parent);
  29.     if (child < maX)
  30.         if (arr_medium[child] != INT_MIN) {
  31.             int razn = arr_medium[child] + arr_medium[number_parent];
  32.             if (abs(razn) < (*medium))
  33.                 *medium = abs(razn);
  34.             pref_in(child, arr_medium, maX, medium);
  35.         }
  36. }
  37. void pref(int number_parent, int* arr, int maX, int* arr_medium) {
  38.     int child = Left(number_parent);
  39.     if (child < maX)
  40.         if (arr[child] != INT_MIN) {
  41.             arr_medium[child] = arr[child] - arr[number_parent];
  42.             pref(child, arr, maX, arr_medium);
  43.         }
  44.         else {
  45.             arr_medium[child] = INT_MIN;
  46.         }
  47.     child = Right(number_parent);
  48.     if (child < maX)
  49.         if (arr[child] != INT_MIN) {
  50.             arr_medium[child] = arr[child] - arr[number_parent];
  51.             pref(child, arr, maX, arr_medium);
  52.         }
  53.         else {
  54.             arr_medium[child] = INT_MIN;
  55.         }
  56. }
  57. int main() {
  58.     FILE* F = fopen("input.txt", "r");
  59.     int h;
  60.     fscanf(F, "%d ", &h);
  61.     int maX = pow(2, h + 1) - 1;
  62.     int* tree = (int*)malloc(sizeof(int) * maX);
  63.     char temp[13];
  64.     int i = 0;
  65.     int flag = 0;
  66.  
  67.     while (fscanf(F, "%s", temp) != EOF) {
  68.         int lenght = strlen(temp);
  69.         if (temp[0] == '-') {
  70.             flag = 1;
  71.             if (lenght == 1) {
  72.                 tree[i] = INT_MIN;
  73.                 flag = 0; i++;
  74.                 continue;
  75.             }
  76.         }
  77.         int value = 0;
  78.         for (int j = 0; j < lenght; j++) {
  79.             if (temp[j] == '-')
  80.                 continue;
  81.             value = value * 10 + (temp[j] - '0');
  82.         }
  83.         if (flag)
  84.             value *= -1;
  85.         tree[i] = value;
  86.         i++;
  87.         flag = 0;
  88.     }
  89.     int medium = INT_MAX;
  90.     int* sum = (int*)calloc(maX, sizeof(int));
  91.     pref(0, tree, maX, sum);
  92.     pref_in(0, sum, maX, &medium);
  93.     free(tree);
  94.     free(sum);
  95.     FILE* out = fopen("output.txt", "w");
  96.     fprintf(out, "%d", medium);
  97.     fclose(out);
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement