我是靠谱客的博主 精明裙子,最近开发中收集的这篇文章主要介绍CodeForces - 255D Mr. Bender and Square 二分 + 边界判断,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Mr. Bender has a digital table of size n × n, each cell can be switched on or off. He wants the field to have at least c switched on squares. When this condition is fulfilled, Mr Bender will be happy.

We'll consider the table rows numbered from top to bottom from 1 to n, and the columns — numbered from left to right from 1 to n. Initially there is exactly one switched on cell with coordinates (x, y) (x is the row number, y is the column number), and all other cells are switched off. Then each second we switch on the cells that are off but have the side-adjacent cells that are on.

For a cell with coordinates (x, y) the side-adjacent cells are cells with coordinates (x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1).

In how many seconds will Mr. Bender get happy?

Input

The first line contains four space-separated integers n, x, y, c (1 ≤ n, c ≤ 109; 1 ≤ x, y ≤ nc ≤ n2).

Output

In a single line print a single integer — the answer to the problem.

Examples

Input

6 4 3 1

Output

0

Input

9 3 8 10

Output

2

Note

Initially the first test has one painted cell, so the answer is 0. In the second test all events will go as is shown on the figure. .

题解:找一个最小符合条件的,我们可以二分枚举答案来做,然后我们怎么求时间为 t 时细胞的总数呢  假设边界是无穷大的

总数为: t * 4 + t * (t - 1) / 2  * 4   +  1  先是4个方向 然后加上 任意两方向对应的直角依次叠加 

然后就是减去超出边界的 假设到 某一边的距离为 x  超出就为 2 * (t - 1 - x) * (t - 1 - x + 1) / 2  +  t -  x 这个方向两边都超出了

再然后就是超出的部分有相交的部分 就是角上  假设点到达该角对应两边的距离为 x y 那超出部分为 (t-1-x-y)(t-1-x-y+1)/2

#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
ll n,x,y,m;
ll cul(ll p)
{
if(p<=0) return 0;
return (p+1)*p/2;
}
int judge(ll p)
{
ll a=x-1,b=y-1,c=n-x,d=n-y;
ll ans=min(p,a)+min(p,b)+min(p,c)+min(p,d)+1;
p--;
ans+=cul(p)*4-2*cul(p-a)-2*cul(p-b)-2*cul(p-c)-2*cul(p-d);
ans+=cul(p-a-b)+cul(p-b-c)+cul(p-c-d)+cul(p-d-a);
return ans>=m;
}
int main()
{
scanf("%lld%lld%lld%lld",&n,&x,&y,&m);
ll l=0,r=1e9,ans=0;
//	cout<<judge(2)<<endl;
while(l<=r)
{
ll mid=(r+l)>>1;
if(judge(mid))
{
ans=mid;
r=mid-1;
}
else l=mid+1;
}
printf("%lldn",ans);
return 0;
} 

 

最后

以上就是精明裙子为你收集整理的CodeForces - 255D Mr. Bender and Square 二分 + 边界判断的全部内容,希望文章能够帮你解决CodeForces - 255D Mr. Bender and Square 二分 + 边界判断所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部