#include "cielib.h"
#include <cstring>
bool isHot(int d_idx, int d_max, int r, int pos){
if(pos == -1 || pos == r + 1){
return false;
}
int v[d_max] ;
memset( v, 0, d_max*sizeof(int) );
v[d_idx] = pos;
return czyCieplo(v);
}
int getSubPosition(int d_idx, int d_max, int r){
int b = 0;
int e = r;
while(b != e){
int mid = (e-b)/2 + b;
bool left, center, right;
center = isHot(d_idx, d_max, r, mid);
left = isHot(d_idx, d_max, r, mid-1);
right = isHot(d_idx, d_max, r, mid+1);
if(!left && !right){
return mid;
}
if(left){
if(mid-b == 1){
return b;
}
e = mid;
}
else{
if(e-mid == 1){
return e;
}
b = mid;
}
}
return b;
}
int main() {
int r = podajR();
int d = podajD();
int k = podajK();
int result[d];
for(int i=0; i<d; ++i){
result[i] = getSubPosition(i, d, r);
}
znalazlem(result);
}
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 | #include "cielib.h" #include <cstring> bool isHot(int d_idx, int d_max, int r, int pos){ if(pos == -1 || pos == r + 1){ return false; } int v[d_max] ; memset( v, 0, d_max*sizeof(int) ); v[d_idx] = pos; return czyCieplo(v); } int getSubPosition(int d_idx, int d_max, int r){ int b = 0; int e = r; while(b != e){ int mid = (e-b)/2 + b; bool left, center, right; center = isHot(d_idx, d_max, r, mid); left = isHot(d_idx, d_max, r, mid-1); right = isHot(d_idx, d_max, r, mid+1); if(!left && !right){ return mid; } if(left){ if(mid-b == 1){ return b; } e = mid; } else{ if(e-mid == 1){ return e; } b = mid; } } return b; } int main() { int r = podajR(); int d = podajD(); int k = podajK(); int result[d]; for(int i=0; i<d; ++i){ result[i] = getSubPosition(i, d, r); } znalazlem(result); } |
English