#include "cielib.h" #include <stdlib.h> #include <time.h> #include <iostream> using namespace std; int randint(int a, int b) { int wynik; if (a == b) wynik = a; else wynik = ((rand() % (b+1-a)) + a); return wynik; } int main() { srand(time(NULL)); int d = podajD(); int k = podajK(); int r = podajR(); long long do_obliczenia = d, wymiar=0, x, y; int wspolrzedne_s[d], wspolrzedne_n[d], dolne[d], gorne[d]; long long niewiadomo[d]; long long suma = (r) * d; for (int i=0; i<d; i++) wspolrzedne_s[i]=randint(0, d), wspolrzedne_n[i]=wspolrzedne_s[i], dolne[i]=0, gorne[i]=r, niewiadomo[i]=r; for (int i = 0; i < k; i++) { wspolrzedne_s[wymiar] = wspolrzedne_n[wymiar]; x = randint(0, suma); wymiar = 0, y = niewiadomo[0]; while (y <= x) { wymiar++; y += niewiadomo[wymiar]; } while (wspolrzedne_n[wymiar] == wspolrzedne_s[wymiar]) wspolrzedne_n[wymiar] = randint(dolne[wymiar], gorne[wymiar]); if (czyCieplo(wspolrzedne_n)) { x = gorne[wymiar] - dolne[wymiar]; if (wspolrzedne_n[wymiar] > wspolrzedne_s[wymiar]) dolne[wymiar] = (wspolrzedne_s[wymiar] + wspolrzedne_n[wymiar] + 1) / 2; else gorne[wymiar] = (wspolrzedne_s[wymiar] + wspolrzedne_n[wymiar] - 1) / 2; if (gorne[wymiar] == dolne [wymiar]) do_obliczenia--; y = gorne[wymiar] - dolne[wymiar]; suma = suma + y - x; niewiadomo[wymiar]=y; } if (do_obliczenia == 0) i = k; } znalazlem(dolne); }
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 | #include "cielib.h" #include <stdlib.h> #include <time.h> #include <iostream> using namespace std; int randint(int a, int b) { int wynik; if (a == b) wynik = a; else wynik = ((rand() % (b+1-a)) + a); return wynik; } int main() { srand(time(NULL)); int d = podajD(); int k = podajK(); int r = podajR(); long long do_obliczenia = d, wymiar=0, x, y; int wspolrzedne_s[d], wspolrzedne_n[d], dolne[d], gorne[d]; long long niewiadomo[d]; long long suma = (r) * d; for (int i=0; i<d; i++) wspolrzedne_s[i]=randint(0, d), wspolrzedne_n[i]=wspolrzedne_s[i], dolne[i]=0, gorne[i]=r, niewiadomo[i]=r; for (int i = 0; i < k; i++) { wspolrzedne_s[wymiar] = wspolrzedne_n[wymiar]; x = randint(0, suma); wymiar = 0, y = niewiadomo[0]; while (y <= x) { wymiar++; y += niewiadomo[wymiar]; } while (wspolrzedne_n[wymiar] == wspolrzedne_s[wymiar]) wspolrzedne_n[wymiar] = randint(dolne[wymiar], gorne[wymiar]); if (czyCieplo(wspolrzedne_n)) { x = gorne[wymiar] - dolne[wymiar]; if (wspolrzedne_n[wymiar] > wspolrzedne_s[wymiar]) dolne[wymiar] = (wspolrzedne_s[wymiar] + wspolrzedne_n[wymiar] + 1) / 2; else gorne[wymiar] = (wspolrzedne_s[wymiar] + wspolrzedne_n[wymiar] - 1) / 2; if (gorne[wymiar] == dolne [wymiar]) do_obliczenia--; y = gorne[wymiar] - dolne[wymiar]; suma = suma + y - x; niewiadomo[wymiar]=y; } if (do_obliczenia == 0) i = k; } znalazlem(dolne); } |