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
//PA2016, runda 3, Cieplo-zimno
// Andrzej Pezarski

#include "cielib.h"


#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <queue>


using namespace std;
const int maxD=500;

vector<pair<int, int> > V;
int P[maxD];

int D, R, K;


int main() {
    D = podajD();
    K = podajK();
    R = podajR();
    V.resize(D, make_pair(0, R));
    
    while(1) {
        pair<int, int> maxt(0, -1);
        for (int i=0; i<D; i++) {
            maxt=max(maxt, make_pair(V[i].second-V[i].first, i));
        }
        if(maxt.first==2) break;
        int j=maxt.second;
        for (int i=0; i<D; i++) P[i]=(V[i].first+V[i].second)/2;
        P[j]=V[j].second;
        czyCieplo(P);
        P[j]=V[j].first;
        if (czyCieplo(P)) V[j].second=(V[j].first+V[j].second+1)/2;
        else V[j].first=(V[j].first+V[j].second)/2;
    }
    for (int i=0; i<D; i++) P[i]=max(1, min(R-1, (V[i].first+V[i].second)/2));
    for (int i=0; i<D; i++) {
        P[i]--;
        czyCieplo(P);       
        P[i]+=2;
        if (!czyCieplo(P)) {
            P[i]-=2;
            if (!czyCieplo(P)) P[i]++;
        }
    }
    znalazlem(P);
    
    
    return 0;
}