#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); } |
English