Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include "cielib.h"
- #include <bitset>
- #include <vector>
- #include <algorithm>
- using namespace std;
- vector<int> gorne;
- vector<int> dolne;
- vector<int> roznice;
- int d;
- int R;
- int maxsize(){
- return max_element(begin(roznice),end(roznice)) - begin(roznice);
- }
- int ustaw_punkty(vector<int> &a, vector<int>&b, int dM)
- {
- for (int i=0;i<d;i++){//ustaw wszystkie z grubsza w srodku
- a[i]=dolne[i] + (gorne[i]-dolne[i])/2;
- b[i]=dolne[i] + (gorne[i]-dolne[i])/2;
- }
- a[dM] = dolne[dM];//ustaw wlasciwy wymiar na skrajach
- b[dM] = gorne[dM];
- return b[dM]-a[dM]; //srednica
- }
- int main(int argc, char *argv[])
- {
- d = podajD();
- R = podajR();
- gorne = vector<int>(d, R);
- dolne = vector<int>(d, 0);
- roznice = vector<int>(d, R);
- int dM = maxsize(); // wymiar, w ktorym srednice chcemy zredukowac
- vector<int> a (d,0);
- vector<int> b (d,0);
- while (roznice[dM]>1)
- {
- int srednica = ustaw_punkty(a,b,dM);
- czyCieplo(a.data());
- if (czyCieplo(b.data())){
- dolne[dM] += (srednica)/2+1; // d+1 d+1
- }else{
- gorne[dM] -= srednica/2; //- ((srednica%2==1)?1:0);
- }
- roznice[dM] = gorne[dM]-dolne[dM];
- dM = maxsize();
- }
- while (roznice[dM]>0)
- {
- int ia = dolne[dM];
- int ib = gorne[dM];
- ustaw_punkty(a,b,dM);
- if (ib==R){ // nie można iść w górę
- swap(a,b);
- swap(ia,ib);
- }
- int kierunek = ib-ia; //normalnie +1
- vector<int> c = b;
- c[dM] +=kierunek;
- czyCieplo(c.data());
- if (!czyCieplo(b.data()))
- ia += kierunek;
- else if (czyCieplo(a.data()))
- ib-= kierunek;
- else if (czyCieplo(b.data()))
- ia += kierunek;
- else
- ib-= kierunek;
- dolne[dM]=min(ia,ib);
- gorne[dM]=max(ia,ib);
- roznice[dM] = gorne[dM]-dolne[dM];
- dM = maxsize();
- }
- ustaw_punkty(a,b,0);
- znalazlem(a.data());
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement