#include <cstdio> #include "cielib.h" #define MAXD 507 //#define DEBUG void print_t(int *t, int d) { for (int i = 0; i < d; i++) printf("%d ", t[i]); printf("\n"); } void print_ab(int *a, int *b, int d) { printf("{"); for (int i = 0; i < d; i++) { printf("[%d, %d], ", a[i], b[i]); } printf("}\n"); } int a[MAXD], b[MAXD], t[MAXD]; int main () { int d = podajD(); int k = podajK(); int r = podajR(); for (int i = 0; i < d; i++) { a[i] = 0; b[i] = r; t[i] = r / 2; } #ifdef DEBUG print_t(a, d); print_t(b, d); print_t(t, d); printf("\n\n\n"); #endif bool done = false; while (!done) { done = true; for (int wym = 0; wym < d; wym++) { if (b[wym] <= a[wym] + 1) continue; t[wym] = a[wym]; #ifdef DEBUG print_t(t, d); #endif czyCieplo(t); t[wym] = b[wym]; bool res = czyCieplo(t); //t[wym] = a[wym]; //bool res2 = czyCieplo(t); #ifdef DEBUG print_t(t, d); printf(res ? "CIEPLO\n" : "ZIMNO\n"); #endif if (res) { a[wym] = (a[wym] + b[wym] + 1) / 2; } else { b[wym] = (a[wym] + b[wym]) / 2; } t[wym] = (a[wym] + b[wym]) / 2; #ifdef DEBUG print_ab(a, b, d); printf("\n"); #endif } for (int wym = 0; wym < d; wym++) { if (b[wym] > a[wym] + 1) done = false; } } done = false; while (!done) { done = true; for (int wym = 0; wym < d; wym++) { if (b[wym] == a[wym]) continue; done = false; if (a[wym] == 0) { // => b[wym] == 1 t[wym] = 2; czyCieplo(t); t[wym] = 0; bool res = czyCieplo(t); if (res) { b[wym] = 0; } else { a[wym] = 1; } t[wym] = a[wym]; // == b[wym] } else { // a[wym] > 0 t[wym] = a[wym] - 1; czyCieplo(t); t[wym] = a[wym] + 1; // == b[wym] bool res = czyCieplo(t); if (res) { a[wym] = b[wym]; // == a[wym] + 1 } else { b[wym] = a[wym]; } t[wym] = a[wym]; // == b[wym] } } } znalazlem(t); return 0; }
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 110 111 112 113 | #include <cstdio> #include "cielib.h" #define MAXD 507 //#define DEBUG void print_t(int *t, int d) { for (int i = 0; i < d; i++) printf("%d ", t[i]); printf("\n"); } void print_ab(int *a, int *b, int d) { printf("{"); for (int i = 0; i < d; i++) { printf("[%d, %d], ", a[i], b[i]); } printf("}\n"); } int a[MAXD], b[MAXD], t[MAXD]; int main () { int d = podajD(); int k = podajK(); int r = podajR(); for (int i = 0; i < d; i++) { a[i] = 0; b[i] = r; t[i] = r / 2; } #ifdef DEBUG print_t(a, d); print_t(b, d); print_t(t, d); printf("\n\n\n"); #endif bool done = false; while (!done) { done = true; for (int wym = 0; wym < d; wym++) { if (b[wym] <= a[wym] + 1) continue; t[wym] = a[wym]; #ifdef DEBUG print_t(t, d); #endif czyCieplo(t); t[wym] = b[wym]; bool res = czyCieplo(t); //t[wym] = a[wym]; //bool res2 = czyCieplo(t); #ifdef DEBUG print_t(t, d); printf(res ? "CIEPLO\n" : "ZIMNO\n"); #endif if (res) { a[wym] = (a[wym] + b[wym] + 1) / 2; } else { b[wym] = (a[wym] + b[wym]) / 2; } t[wym] = (a[wym] + b[wym]) / 2; #ifdef DEBUG print_ab(a, b, d); printf("\n"); #endif } for (int wym = 0; wym < d; wym++) { if (b[wym] > a[wym] + 1) done = false; } } done = false; while (!done) { done = true; for (int wym = 0; wym < d; wym++) { if (b[wym] == a[wym]) continue; done = false; if (a[wym] == 0) { // => b[wym] == 1 t[wym] = 2; czyCieplo(t); t[wym] = 0; bool res = czyCieplo(t); if (res) { b[wym] = 0; } else { a[wym] = 1; } t[wym] = a[wym]; // == b[wym] } else { // a[wym] > 0 t[wym] = a[wym] - 1; czyCieplo(t); t[wym] = a[wym] + 1; // == b[wym] bool res = czyCieplo(t); if (res) { a[wym] = b[wym]; // == a[wym] + 1 } else { b[wym] = a[wym]; } t[wym] = a[wym]; // == b[wym] } } } znalazlem(t); return 0; } |