#include<bits/stdc++.h> #include "cielib.h" using namespace std; int coor[600]; int cros[600]; int pom[600]; int d,r,k; int mal,duz; int war; void bins1(int x){ int l=0,p=r,sr; while(l<=p){ sr=(l+p)/2; coor[x]=sr; czyCieplo(pom); if(czyCieplo(coor)==1){ pom[x]=coor[x]; l=sr+1; } else p=sr-1; } coor[x]=(l+p)/2; pom[x]=0; l=0; p=coor[x]; while(l<=p){ sr=(l+p)/2; pom[x]=sr; czyCieplo(pom); if(czyCieplo(coor)==1) l=sr+1; else p=sr-1; } cros[x]=pom[x]; pom[x]=0; coor[x]=0; } void bins2(int x,int y){ int sr; for(int i=0;i<d;i++){ pom[i]=cros[i]; } while(x<=y){ sr=(x+y)/2; for(int i=0;i<d;i++){ cros[i]+=sr; } czyCieplo(pom); if(czyCieplo(cros)==1){ for(int i=0;i<d;i++){ pom[i]=cros[i]; } x=sr+1; } else y=sr-1; for(int i=0;i<d;i++){ cros[i]-=sr; } } for(int i=0;i<d;i++){ cros[i]+=(x+y)/2; } } int main(){ d=podajD(); k=podajK(); r=podajR(); czyCieplo(coor); for(int i=0;i<d;i++) bins1(i); czyCieplo(cros); mal=1000000001; for(int i=0;i<d;i++){ mal=min(mal,cros[i]); duz=max(duz,cros[i]); } bins2(0,r-(duz-mal)); znalazlem(cros); }
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 | #include<bits/stdc++.h> #include "cielib.h" using namespace std; int coor[600]; int cros[600]; int pom[600]; int d,r,k; int mal,duz; int war; void bins1(int x){ int l=0,p=r,sr; while(l<=p){ sr=(l+p)/2; coor[x]=sr; czyCieplo(pom); if(czyCieplo(coor)==1){ pom[x]=coor[x]; l=sr+1; } else p=sr-1; } coor[x]=(l+p)/2; pom[x]=0; l=0; p=coor[x]; while(l<=p){ sr=(l+p)/2; pom[x]=sr; czyCieplo(pom); if(czyCieplo(coor)==1) l=sr+1; else p=sr-1; } cros[x]=pom[x]; pom[x]=0; coor[x]=0; } void bins2(int x,int y){ int sr; for(int i=0;i<d;i++){ pom[i]=cros[i]; } while(x<=y){ sr=(x+y)/2; for(int i=0;i<d;i++){ cros[i]+=sr; } czyCieplo(pom); if(czyCieplo(cros)==1){ for(int i=0;i<d;i++){ pom[i]=cros[i]; } x=sr+1; } else y=sr-1; for(int i=0;i<d;i++){ cros[i]-=sr; } } for(int i=0;i<d;i++){ cros[i]+=(x+y)/2; } } int main(){ d=podajD(); k=podajK(); r=podajR(); czyCieplo(coor); for(int i=0;i<d;i++) bins1(i); czyCieplo(cros); mal=1000000001; for(int i=0;i<d;i++){ mal=min(mal,cros[i]); duz=max(duz,cros[i]); } bins2(0,r-(duz-mal)); znalazlem(cros); } |