#include <bits/stdc++.h> #include "cielib.h" const int D=505; int lo[D], hi[D], p[D]; int main() { int d=podajD(), r=podajR(); for(int i=0; i<d; ++i) hi[i]=r+1; while(1) { int mxpos=0; for(int i=0; i<d; ++i) if(hi[mxpos]-lo[mxpos]<hi[i]-lo[i]) mxpos=i; for(int i=0; i<d; ++i) p[i]=(lo[i]+hi[i])/2; if((hi[mxpos]-lo[mxpos])%2==0) { if(lo[mxpos]>0) { p[mxpos]=lo[mxpos]-1; czyCieplo(p); p[mxpos]=hi[mxpos]-1; if(czyCieplo(p)) lo[mxpos]=(hi[mxpos]+lo[mxpos])/2; else hi[mxpos]=(hi[mxpos]+lo[mxpos])/2; } else if(hi[mxpos]<=r) { p[mxpos]=hi[mxpos]; czyCieplo(p); p[mxpos]=lo[mxpos]; if(czyCieplo(p)) hi[mxpos]=(hi[mxpos]+lo[mxpos])/2; else lo[mxpos]=(hi[mxpos]+lo[mxpos])/2; } else { p[mxpos]=0; czyCieplo(p); p[mxpos]=r; if(czyCieplo(p)) lo[mxpos]=(r+1)/2; else hi[mxpos]=(r+1)/2+1; } } else { p[mxpos]=lo[mxpos]; czyCieplo(p); p[mxpos]=hi[mxpos]-1; if(czyCieplo(p)) lo[mxpos]=(hi[mxpos]+lo[mxpos]+1)/2; else hi[mxpos]=(hi[mxpos]+lo[mxpos]+1)/2; } int cnt=0; for(int i=0; i<d; ++i) if(lo[i]+1==hi[i]) ++cnt; if(cnt==d) { znalazlem(lo); return 0; } } }
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 | #include <bits/stdc++.h> #include "cielib.h" const int D=505; int lo[D], hi[D], p[D]; int main() { int d=podajD(), r=podajR(); for(int i=0; i<d; ++i) hi[i]=r+1; while(1) { int mxpos=0; for(int i=0; i<d; ++i) if(hi[mxpos]-lo[mxpos]<hi[i]-lo[i]) mxpos=i; for(int i=0; i<d; ++i) p[i]=(lo[i]+hi[i])/2; if((hi[mxpos]-lo[mxpos])%2==0) { if(lo[mxpos]>0) { p[mxpos]=lo[mxpos]-1; czyCieplo(p); p[mxpos]=hi[mxpos]-1; if(czyCieplo(p)) lo[mxpos]=(hi[mxpos]+lo[mxpos])/2; else hi[mxpos]=(hi[mxpos]+lo[mxpos])/2; } else if(hi[mxpos]<=r) { p[mxpos]=hi[mxpos]; czyCieplo(p); p[mxpos]=lo[mxpos]; if(czyCieplo(p)) hi[mxpos]=(hi[mxpos]+lo[mxpos])/2; else lo[mxpos]=(hi[mxpos]+lo[mxpos])/2; } else { p[mxpos]=0; czyCieplo(p); p[mxpos]=r; if(czyCieplo(p)) lo[mxpos]=(r+1)/2; else hi[mxpos]=(r+1)/2+1; } } else { p[mxpos]=lo[mxpos]; czyCieplo(p); p[mxpos]=hi[mxpos]-1; if(czyCieplo(p)) lo[mxpos]=(hi[mxpos]+lo[mxpos]+1)/2; else hi[mxpos]=(hi[mxpos]+lo[mxpos]+1)/2; } int cnt=0; for(int i=0; i<d; ++i) if(lo[i]+1==hi[i]) ++cnt; if(cnt==d) { znalazlem(lo); return 0; } } } |