您的位置:首页 > 其它

cf 156 div.2 D. Mr. Bender and Square

2012-12-25 23:39 411 查看
这题就是先算总面积,再减去超出面积,再加上重叠面积。关键要注意细节。

/*
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: