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
#include <iostream>
#include "cielib.h"
using namespace std;
int d,k,r,p,l,x,sr,y,naj;
int pusta[500];
int odp[500];
int ja[500];
bool czy[500];
int main(){
    d=podajD();
    r=podajR();
    czyCieplo(pusta);
    for(int i=0;i<d;i++){
        ja[i]=r;
    }
    if(!czyCieplo(ja)){
        naj=r;
        for(int j=0;j<d;j++){
            l=0;
            p=d-1;
            while(l<p){
                sr=(l+p)/2;
                for(int i=0;i<d;i++){
                        if(i<=sr and i>=l and !czy[i])
                        ja[i]=0;
                    else if(!czy[i])
                        ja[i]=1;
                }
                czyCieplo(ja);
                for(int i=l;i<=sr;i++){
                    if(!czy[i])
                        ja[i]=1;
                }
                if(czyCieplo(ja))
                    p=sr;
                else
                    l=sr+1;
            }
            x=l;
            l=0;
            p=naj;
            while(l+1<p){
                czyCieplo(pusta);
                sr=(p+l)/2;
                for(int i=0;i<d;i++){
                    if(!czy[i])
                        ja[i]=sr;
                }
                if(czyCieplo(ja))
                    l=sr;
                else
                    p=sr;
            }
            ja[x]=l;
            czy[x]=1;
            naj=ja[x];
            pusta[x]=l;
        }
        y=ja[x]/2;
        for(int i=0;i<d;i++){
            odp[i]=ja[i]-y;
        }
        znalazlem(odp);
    }
    else{
        naj=0;
        for(int i=0;i<d;i++){
            pusta[i]=r;
        }
        for(int j=0;j<d;j++){
            l=0;
            p=d-1;
            while(l<p){
                sr=(l+p)/2;
                for(int i=0;i<d;i++){
                        if(i<=sr and i>=l and !czy[i])
                        ja[i]=r;
                    else if(!czy[i])
                        ja[i]=r-1;
                }
                czyCieplo(ja);
                for(int i=l;i<=sr;i++){
                    if(!czy[i])
                        ja[i]=r-1;
                }
                if(czyCieplo(ja))
                    p=sr;
                else
                    l=sr+1;
            }
            x=l;
            l=naj;
            p=r;
            while(l+1<p){
                    czyCieplo(pusta);
                    sr=(p+l)/2;
                    for(int i=0;i<d;i++){
                        if(!czy[i])
                            ja[i]=sr;
                    }
                    if(czyCieplo(ja))
                        p=sr;
                    else
                        l=sr;
            }
            ja[x]=p;
            czy[x]=1;
            naj=ja[x];
            pusta[x]=p;
        }
        y=(r-ja[x])/2;
        for(int i=0;i<d;i++){
            odp[i]=ja[i]+y;
        }
        znalazlem(odp);
    }
}