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
#include "cielib.h"

using namespace std;

bool czy_juz_mozna_przestac(int pierwsza[], int druga[], int petla)
{
    for(int i = 0; i < petla; i++)
    {
        if(pierwsza[i] != druga[i])
        {
            return 0;
        }
    }

    return 1;
}

int main()
{
    int wymiary = podajD();
    int r = podajR();

    int poczatek[wymiary];

    for(int i = 0; i < wymiary; i++)
    {
        poczatek[i] = 0;
    }

    int robocza[wymiary];

    for(int i = 0; i < wymiary; i++)
    {
        robocza[i] = 0;
    }

    int koniec[wymiary];

    for(int i = 0; i < wymiary; i++)
    {
        koniec[i] = r;
    }

    while(true)
    {
        if(czy_juz_mozna_przestac(poczatek, koniec, wymiary) == 1)
        {
            znalazlem(robocza);
        }
        else
        {
            for(int i = 0; i < wymiary; i++)
            {
                if(poczatek[i] != koniec[i])
                {
                    robocza[i] = koniec[i];
                    if(czyCieplo(robocza) == 1)
                    {
                        if(koniec[i] - poczatek[i] == 1)
                        {
                            poczatek[i] = koniec[i];
                        }
                        else if((koniec[i] - poczatek[i]) % 2 == 0)
                        {
                            poczatek[i] = (poczatek[i] + koniec[i]) / 2;
                        }
                        else
                        {
                            poczatek[i] = (poczatek[i] + koniec[i] - 1) / 2;
                        }
                        robocza[i] = poczatek[i];
                        czyCieplo(robocza);
                    }
                    else
                    {
                        robocza[i] = poczatek[i];

                        if(koniec[i] - poczatek[i] == 1)
                        {
                            koniec[i] = poczatek[i];
                        }

                        if(czyCieplo(robocza) == 1)
                        {
                            if((koniec[i] - poczatek[i]) % 2 == 0)
                            {
                                koniec[i] = (poczatek[i] + koniec[i]) / 2;
                            }
                            else
                            {
                                koniec[i] = (poczatek[i] + koniec[i] + 1) / 2;
                            }
                        }
                        else
                        {
                            if(koniec[i] - poczatek[i] == 2)
                            {
                                koniec[i] = koniec[i] - 1;
                                poczatek[i] = poczatek[i] + 1;
                            }
                        }
                    }
                }
            }
        }
    }

    return 0;
}