#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); } |
English