#include "cielib.h" #include <stdio.h> #define ASSERT(x,y) if(!(x)) {printf("%s\n",y);return 1;} int main() { int d = podajD(); int r = podajR(); int i; int pocz[d]; int konc[d]; int poprzPozycja = 0; int miejsce[d]; int obecnyWymiar = 0; int krok = 0; int diff,poz; int wGore = 1; for (i=0; i<d; ++i) { pocz[i] = 0; miejsce[i] = 0; konc[i] = r; } int licznik = 0; int licznikUtknal = 0; czyCieplo(miejsce); while (licznik<d) { while ( pocz[obecnyWymiar] == konc[obecnyWymiar] ) { ++obecnyWymiar; obecnyWymiar = obecnyWymiar%d; } if ( miejsce[obecnyWymiar] <= pocz[obecnyWymiar] ) { miejsce[obecnyWymiar] = konc[obecnyWymiar]; wGore = 1; } else { // ASSERT( miejsce[obecnyWymiar] >= konc[obecnyWymiar], "xxx" ); miejsce[obecnyWymiar] = pocz[obecnyWymiar]; wGore = 0; } if (czyCieplo(miejsce)) { diff = konc[obecnyWymiar]-pocz[obecnyWymiar]; if (wGore) { pocz[obecnyWymiar] = pocz[obecnyWymiar] + (diff/2) + 1; } else { konc[obecnyWymiar] = konc[obecnyWymiar] - (diff/2) - 1; } printf("diff=%d\n",diff); if ( pocz[obecnyWymiar] == konc[obecnyWymiar] ) { printf("found %d\n", pocz[obecnyWymiar]); ++licznik; ++obecnyWymiar; obecnyWymiar = obecnyWymiar%d; } } else { wGore = !wGore; if (wGore) { miejsce[obecnyWymiar] = konc[obecnyWymiar]; } else { miejsce[obecnyWymiar] = pocz[obecnyWymiar]; } if (czyCieplo(miejsce)) { diff = konc[obecnyWymiar]-pocz[obecnyWymiar]; if (wGore) { pocz[obecnyWymiar] = pocz[obecnyWymiar] + (diff/2) + 1; } else { konc[obecnyWymiar] = konc[obecnyWymiar] - (diff/2) - 1; } if ( pocz[obecnyWymiar] == konc[obecnyWymiar] ) { ++licznik; ++obecnyWymiar; obecnyWymiar = obecnyWymiar%d; } } else { diff = konc[obecnyWymiar]-pocz[obecnyWymiar]; if ( (diff%2)==0 ) { poz = pocz[obecnyWymiar] + (diff/2); miejsce[obecnyWymiar] = poz; if (czyCieplo(miejsce)) { pocz[obecnyWymiar] = poz; konc[obecnyWymiar] = poz; ++licznik; } else { ++licznikUtknal; if (licznikUtknal==d) { znalazlem(konc); for (i=0;i<d;++i) { miejsce[i] = pocz[i]; } czyCieplo(miejsce); for (i=0;i<d;++i) { miejsce[i] = konc[i]; } // :-( } } } miejsce[obecnyWymiar] = pocz[obecnyWymiar]; ++obecnyWymiar; obecnyWymiar = obecnyWymiar%d; } } } znalazlem(miejsce); }
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 | #include "cielib.h" #include <stdio.h> #define ASSERT(x,y) if(!(x)) {printf("%s\n",y);return 1;} int main() { int d = podajD(); int r = podajR(); int i; int pocz[d]; int konc[d]; int poprzPozycja = 0; int miejsce[d]; int obecnyWymiar = 0; int krok = 0; int diff,poz; int wGore = 1; for (i=0; i<d; ++i) { pocz[i] = 0; miejsce[i] = 0; konc[i] = r; } int licznik = 0; int licznikUtknal = 0; czyCieplo(miejsce); while (licznik<d) { while ( pocz[obecnyWymiar] == konc[obecnyWymiar] ) { ++obecnyWymiar; obecnyWymiar = obecnyWymiar%d; } if ( miejsce[obecnyWymiar] <= pocz[obecnyWymiar] ) { miejsce[obecnyWymiar] = konc[obecnyWymiar]; wGore = 1; } else { // ASSERT( miejsce[obecnyWymiar] >= konc[obecnyWymiar], "xxx" ); miejsce[obecnyWymiar] = pocz[obecnyWymiar]; wGore = 0; } if (czyCieplo(miejsce)) { diff = konc[obecnyWymiar]-pocz[obecnyWymiar]; if (wGore) { pocz[obecnyWymiar] = pocz[obecnyWymiar] + (diff/2) + 1; } else { konc[obecnyWymiar] = konc[obecnyWymiar] - (diff/2) - 1; } printf("diff=%d\n",diff); if ( pocz[obecnyWymiar] == konc[obecnyWymiar] ) { printf("found %d\n", pocz[obecnyWymiar]); ++licznik; ++obecnyWymiar; obecnyWymiar = obecnyWymiar%d; } } else { wGore = !wGore; if (wGore) { miejsce[obecnyWymiar] = konc[obecnyWymiar]; } else { miejsce[obecnyWymiar] = pocz[obecnyWymiar]; } if (czyCieplo(miejsce)) { diff = konc[obecnyWymiar]-pocz[obecnyWymiar]; if (wGore) { pocz[obecnyWymiar] = pocz[obecnyWymiar] + (diff/2) + 1; } else { konc[obecnyWymiar] = konc[obecnyWymiar] - (diff/2) - 1; } if ( pocz[obecnyWymiar] == konc[obecnyWymiar] ) { ++licznik; ++obecnyWymiar; obecnyWymiar = obecnyWymiar%d; } } else { diff = konc[obecnyWymiar]-pocz[obecnyWymiar]; if ( (diff%2)==0 ) { poz = pocz[obecnyWymiar] + (diff/2); miejsce[obecnyWymiar] = poz; if (czyCieplo(miejsce)) { pocz[obecnyWymiar] = poz; konc[obecnyWymiar] = poz; ++licznik; } else { ++licznikUtknal; if (licznikUtknal==d) { znalazlem(konc); for (i=0;i<d;++i) { miejsce[i] = pocz[i]; } czyCieplo(miejsce); for (i=0;i<d;++i) { miejsce[i] = konc[i]; } // :-( } } } miejsce[obecnyWymiar] = pocz[obecnyWymiar]; ++obecnyWymiar; obecnyWymiar = obecnyWymiar%d; } } } znalazlem(miejsce); } |