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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include <cstdio>
#include <cmath>
#include <stdlib.h>
#include "cielib.h"
#include <iostream>

using namespace std;
int main()
{

    int d,k,r;
    char przer;
    int entek[501];
    int entekrog[501];
    int maxentek[501];
    int minentek[501];
    int tmp_entek;
    d=podajD();
    k=podajK();
    r=podajR();
    int ktora_zla=-1;
    int zla_losowana;
    //const int krotka[501]={1122,1312,1774};
    int if_koniec=1;
    int if_sym=1;

    for(int i=0;i<d;i++)
    {
        entek[i]=0;
        entekrog[i]=0; //0 - dodajemy do wsp
        maxentek[i]=r;
        minentek[i]=0;
    }
    czyCieplo(entek);
    for(;;)
    {
        ktora_zla=-1;
        for(int i=0;i<d;i++)
        {
            if(entekrog[i]==0)
            {
                entek[i]+=1;
                if(czyCieplo(entek)==1)
                {
                    ktora_zla=i;
                }
                entek[i]-=1;
                czyCieplo(entek);
            }
            if(entekrog[i]==1)
            {
                entek[i]-=1;
                if(czyCieplo(entek)==1)
                {
                    ktora_zla=i;
                }
                entek[i]+=1;
                czyCieplo(entek);
            }
        }
        if(ktora_zla==-1)
        {
            if_koniec=1;
            for(int i=0;i<d;i++)
            {
                if(maxentek[i]-minentek[i]!=0)
                {
                    if_koniec=0;
                    break;
                }
            }
            if(if_koniec==1)
            {
                znalazlem(entek);
                break;
            }else{
                for(int i=0;i<d;i++)
                {
                    if(entekrog[i]==0)
                    {
                        entek[i]=maxentek[i];
                        entekrog[i]=1;
                        if(czyCieplo(entek)==1)
                        {
                            if_sym=0;
                            minentek[i]=(maxentek[i]+minentek[i])/2;
                            break;
                        }
                    }else{
                        entek[i]=minentek[i];
                        entekrog[i]=0;
                        if(czyCieplo(entek)==1)
                        {
                            if_sym=0;
                            maxentek[i]=ceil(double((maxentek[i]+minentek[i]))/2);
                            break;
                        }
                    }

                }
                if(if_sym==1)
                {
                    for(int i=0;i<d;i++)
                    {
                        //printf("i: %d maxentek: %d minentek: %d rog: %d entek: %d\n",i,maxentek[i],minentek[i],entekrog[i],entek[i]);
                        if(maxentek[i]-minentek[i]!=0)
                        {
                            if(entekrog[i]==0)
                            {
                                entek[i]++;
                                minentek[i]++;
                            }else{
                                entek[i]--;
                                maxentek[i]--;
                            }
                        }
                    }
                }


            }

        }else{
            //printf("Zla: %d Rog: %d\n",ktora_zla,entekrog[ktora_zla]);
            if(entekrog[ktora_zla]==0)
            {
                tmp_entek=entek[ktora_zla];
                entek[ktora_zla]=maxentek[ktora_zla];
                if(czyCieplo(entek)==0)
                {
                    //printf("Zimno %d\n",entek[ktora_zla]);
                    entek[ktora_zla]=tmp_entek;
                    czyCieplo(entek);
                    maxentek[ktora_zla]=ceil(double((maxentek[ktora_zla]+minentek[ktora_zla]))/2);
                    //printf("Minentek: %d Maxentek: %d\n",minentek[ktora_zla],maxentek[ktora_zla]);
                }else{
                    //printf("Cieplo %d\n",entek[ktora_zla]);
                    minentek[ktora_zla]=(maxentek[ktora_zla]+minentek[ktora_zla])/2;
                    entekrog[ktora_zla]=1;
                    //printf("Minentek: %d Maxentek: %d\n",minentek[ktora_zla],maxentek[ktora_zla]);
                }
            }else{
                tmp_entek=entek[ktora_zla];
                entek[ktora_zla]=minentek[ktora_zla];
                if(czyCieplo(entek)==0)
                {
                    //printf("Zimno %d\n",entek[ktora_zla]);
                    entek[ktora_zla]=tmp_entek;
                    czyCieplo(entek);
                    minentek[ktora_zla]=(maxentek[ktora_zla]+minentek[ktora_zla])/2;
                    //printf("Minentek: %d Maxentek: %d\n",minentek[ktora_zla],maxentek[ktora_zla]);
                }else{
                    //printf("Cieplo %d\n",entek[ktora_zla]);
                    maxentek[ktora_zla]=ceil(double((maxentek[ktora_zla]+minentek[ktora_zla]))/2);
                    entekrog[ktora_zla]=0;
                    //printf("Minentek: %d Maxentek: %d\n",minentek[ktora_zla],maxentek[ktora_zla]);
                }

            }
        }
        //scanf("%c",&przer);
        /*for(int i=0;i<d;i++)
            printf("%d ",entek[i]);

        printf("\n");*/
    }
}