这题就是先算总面积,再减去超出面积,再加上重叠面积。关键要注意细节。
/* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,please indicate the source** */ #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <queue> #define INF 1E9 using namespace std; int main() { long long n,x,y,c; cin>>n>>y>>x>>c; long long now=0; long long i,xr,xl,yu,yd,d; x--;y--; for(i=1;now<c;i++) { now=i*i+(i-1)*(i-1); if(now<c)continue; i--; xr=x+i; xl=x-i; yu=y-i; yd=y+i; if(xl<0)now-=xl*xl; if(xr>n-1)now-=(xr-n+1)*(xr-n+1); if(yu<0) { now-=yu*yu; yu++; d=-yu; if(x+d>n-1)now+=(x+d-n+2)*(x+d-n+1)/2; if(x+yu<0)now+=(x-d)*(x-d-1)/2; } if(yd>n-1) { now-=(yd-n+1)*(yd-n+1); d=yd-n+1; d--; if(x+d>n-1)now+=(x+d-n+2)*(x+d-n+1)/2; if(x-d<0)now+=(x-d)*(x-d-1)/2; } i++; } cout<<i-2<<endl; }