1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#import "cielib.h"
// #import <iostream>
#import <queue>
using namespace std;

int main() {
  int d = podajD();
  int r = podajR();
  int pos[500];
  int min[500];
  int max[500];
  bool changed[500];
  queue<int> q;
  for (int i = 0; i < d; i++) {
    pos[i] = 0;
    min[i] = 0;
    max[i] = r;
    changed[i] = false;
    q.push(i);
  }
  while(!q.empty()) {
    int dim = q.front();
    q.pop();
    while (min[dim] < max[dim]) {
      // if (changed[dim]) {
      //   max[dim]++;
      //   changed[dim] = false;
      // }
      int prev = pos[dim];
      // cout << "dim: " << dim << " min: " << min[dim] << " max: " << max[dim] << " (" << max[dim] - min[dim] << ")" << endl;
      // int p1 = min[dim] + (max[dim] - min[dim]) / 4;
      // int p2 = max[dim] - (max[dim] - min[dim]) / 4;

      if (min[dim] != pos[dim]) {
        pos[dim] = min[dim];
        // cout << "test1: " << pos[dim] << endl;
        czyCieplo(pos);
      }
      pos[dim] = max[dim];
      // cout << "test2: " << pos[dim] << endl;
      if (czyCieplo(pos)) {
        min[dim] = min[dim] + (max[dim] - min[dim]) / 2 + 1;
        continue;
      }

      pos[dim] = min[dim];
      // cout << "test3: " << pos[dim] << endl;
      if (czyCieplo(pos)) {
        max[dim] = min[dim] + (max[dim] - min[dim]) / 2;
        continue;
      }

      if ((max[dim] - min[dim]) % 2 == 0) {
        pos[dim] = min[dim] + (max[dim] - min[dim]) / 2;
        // cout << "test4: " << pos[dim] << endl;
        if (czyCieplo(pos)) {
          min[dim] = max[dim] = pos[dim];
          continue;
        }
      }

      if (min[dim] < r) pos[dim] = min[dim] + 1;
      else if (max[dim] > 0) pos[dim] = max[dim] - 1;

      if (max[dim] - min[dim] == 2) {
        if (min[dim] > 0) min[dim]--;
        else if (max[dim] < r) max[dim]++;
      }
      // if (max[dim] > min[dim]) {
      //   max[dim]--;
      //   changed[dim] = true;
      // }

      // cout << "break" << endl;
      q.push(dim);
      break;
      // cout << "max: " << max << " min: " << min << endl;
    }
  }
  znalazlem(pos);

  return 0;
}