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 <iostream>
#include "cielib.h"
using namespace std;



int main()
{
//  init();
  int r = podajR();
  int d = podajD();
  int k = podajK();
  int counter=0;
  int licznik = 0;

//  for(int i=0; i<d; ++i) cout<<podaj(i)<<" ";

  int odp[d], start[d], koniec[d];
  int pocz[d], kon[d];
  bool licznik2[d];
  for(int i=0; i<d; i++)
  {
    licznik2[i]=false;
    pocz[i]=0;
    kon[i]=r;
    start[i]=r/2;
    koniec[i]=r/2;
  }

  int lewy,prawy,tmp2,tmp;
  bool flaga1=true, stoper=true;

  while(stoper){
    for(int j=0; j<d; ++j){
       start[j]=koniec[j] = (pocz[j]+kon[j])/2;
//       cerr<<pocz[j]<<" "<<kon[j]<<"\n";
     }
//    cerr<<"---------\n";
//    cin>>k;
    for (int i=0; i<d; ++i)
    {
      if(counter >= (k-3)){ znalazlem(pocz); return 0;}
      if(pocz[i] == kon[i]) continue;

      start[i]=pocz[i];
      lewy=pocz[i];
      koniec[i]=kon[i];
      prawy=kon[i];
//      for(int i=0; i<d; ++i ) cerr<<start[i]<<" "<<koniec[i]<<"\n";
//   if(i == 66) cerr<<lewy<<" "<<prawy<<"  ";
      if (abs(lewy - prawy) <= 1) licznik2[i]=true;
      flaga1=true;
      //for(int i=0; i<d; ++i) flaga1=flaga1 & licznik2[i];
      if( abs(lewy - prawy) ==1 ){
        if( prawy +1 <=r) koniec[i]=prawy+1;
        else start[i]=lewy-1;
        tmp = czyCieplo(start);

        tmp = czyCieplo(koniec);
        counter+=2;
//      if(i == 66) cerr<<tmp<<" tmp2 ";
        if(tmp == 1)
        {
  //        cerr<<"aha";
          lewy=prawy;
        }
        else
        {
          tmp2 = czyCieplo(start);
  //    if(i == 66) cerr<<tmp2<<" tmp3 ";
          if(tmp2 == tmp) lewy=prawy=(koniec[i] + start[i])/2;
          else prawy=lewy;
          counter++;
        }
      }
      //else if(abs(lewy - prawy) ==1) continue;
      else{
        tmp = czyCieplo(start);

        tmp = czyCieplo(koniec);
  //    if(i == 66)  cerr<<tmp<<" tmp1  ";
        counter+=2;
        if(tmp == 1)
        {
          lewy=(pocz[i]+kon[i])/2;
        }
        else
        {

          tmp2=czyCieplo(start);
          if (tmp == tmp2) lewy=(pocz[i]+kon[i])/2;
          else prawy= (pocz[i]+kon[i])/2;
          counter++;
        }

      }
      start[i]=koniec[i]=(lewy+prawy)/2;
//   if(i == 66) cerr<<lewy<<" "<<prawy<<"  ";
      pocz[i]=lewy;
      kon[i]=prawy;
      if (lewy != prawy) licznik++;

    }
      if (licznik == 0) stoper=false;
      else licznik =0;
    }
  //cout<<"odp:  \n";
//  for(int i=0; i<d; i++ )  cerr<<pocz[i]<<"\n";
  znalazlem(pocz);
//  cout<<counter;

  return 0;
}