#include <cstdio> #include <algorithm> #include "cielib.h" using namespace std; int D, R; int pos[500]; int out[500]; int dist = 0; int p[500], k[500]; int licznik = 0; /*int podajD() { int x; scanf("%d", &x); return x; } int podajR() { int x; scanf("%d", &x); return x; } int init() { for (int i = 0; i < D; i++) out[i] = rand() % (R + 1); } int abs(int x) { if (x < 0) x *= -1; return x; } bool czyCieplo(int pozycja[]) { licznik++; int ndist = 0; for (int i = 0; i < D; i++) { ndist = max(ndist, abs(out[i] - pozycja[i])); if (pozycja[i] < 0 || pozycja[i] > R) printf("WYCHODZISZ POZA HIPERSZESCIAN!\n"); } bool o = (ndist < dist) ? 1 : 0; dist = ndist; return o; } void znalazlem(int pozycja[]) { for (int i = 0; i < D; i++) printf("%d ", out[i]); printf("\n"); for (int i = 0; i < D; i++) printf("%d ", pozycja[i]); printf("\n"); printf("%d\n", licznik); }*/ int main() { D = podajD(); R = podajR(); for (int i = 0; i < D; i++) { p[i] = 0, k[i] = R; } bool git = false; while (!git) { for (int i = 0; i < D; i++) pos[i] = (p[i] + k[i]) / 2; git = true; for (int i = 0; i < D; i++) { if (pos[i] > 0 && pos[i] < R) { pos[i]--; czyCieplo(pos); pos[i] += 2; bool b1 = czyCieplo(pos); pos[i] -= 2; bool b2 = czyCieplo(pos); pos[i]++; if (b1) { git = false; p[i] = pos[i] + 1; } else if (b2) { git = false; k[i] = pos[i]; } } } } znalazlem(pos); }
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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | #include <cstdio> #include <algorithm> #include "cielib.h" using namespace std; int D, R; int pos[500]; int out[500]; int dist = 0; int p[500], k[500]; int licznik = 0; /*int podajD() { int x; scanf("%d", &x); return x; } int podajR() { int x; scanf("%d", &x); return x; } int init() { for (int i = 0; i < D; i++) out[i] = rand() % (R + 1); } int abs(int x) { if (x < 0) x *= -1; return x; } bool czyCieplo(int pozycja[]) { licznik++; int ndist = 0; for (int i = 0; i < D; i++) { ndist = max(ndist, abs(out[i] - pozycja[i])); if (pozycja[i] < 0 || pozycja[i] > R) printf("WYCHODZISZ POZA HIPERSZESCIAN!\n"); } bool o = (ndist < dist) ? 1 : 0; dist = ndist; return o; } void znalazlem(int pozycja[]) { for (int i = 0; i < D; i++) printf("%d ", out[i]); printf("\n"); for (int i = 0; i < D; i++) printf("%d ", pozycja[i]); printf("\n"); printf("%d\n", licznik); }*/ int main() { D = podajD(); R = podajR(); for (int i = 0; i < D; i++) { p[i] = 0, k[i] = R; } bool git = false; while (!git) { for (int i = 0; i < D; i++) pos[i] = (p[i] + k[i]) / 2; git = true; for (int i = 0; i < D; i++) { if (pos[i] > 0 && pos[i] < R) { pos[i]--; czyCieplo(pos); pos[i] += 2; bool b1 = czyCieplo(pos); pos[i] -= 2; bool b2 = czyCieplo(pos); pos[i]++; if (b1) { git = false; p[i] = pos[i] + 1; } else if (b2) { git = false; k[i] = pos[i]; } } } } znalazlem(pos); } |