0:Enclosure
http://poj.openjudge.cn/challenge3/0/
- 总时间限制:
- 1000ms
- 内存限制:
- 131072kB
- 描述
为了防止爆零而加入了一道热身题。大家轻虐~
Picks在参加NOI(网上同步赛)时,看到大家都在疯狂讨论“圈地游戏”,于是Picks对这个游戏很!好!奇!他想自己开发一个Bot来玩。
不过Picks水平不行……写一个复杂的程序对他太难了,于是他简化了一下,使得场上只有他写的Bot,且场地大小无限。
圈地游戏的规则是:Bot能够水平或者纵向移动 1 格,每次移动可以选择是否落笔,在落笔状态下就会画出轨迹。每当曾经自己走到的轨迹上时,围成的封闭图形就归它所有,得到这块区域的分数,并且轨迹消失。
请注意!在本题中,得到的分为圈住的地的面积。
为了打倒他的幻想对手,他给自己限定了一个分数 K,只有在得分不少于 K 时他才会满足。他很想知道他最少要移动多少次?
数据范围
- 输入
- 一个测试点中有多组数据(不超过10组)。对于每组数据:
一行,1个数:K,意义如题。
- 输出
- 对于每组数据:
一行,1个数,即最小的次数。
- 样例输入
1
2
8- 样例输出
4
6
12- 提示
- 样例1中,只需要:右→上→左→下。(或者别的画出此图形的方法)。
- 用%lld,坑呐。。。。。。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath> using namespace std; int main(){ //freopen("input.txt","r",stdin); long long n;
while(~scanf("%lld",&n)){
if(n==){
puts("");
}else if(n==){
puts("");
}else if(n== || n==){
puts("");
}else{
long long ans=;
long long x=(long long)sqrt(n-);
long long tmp=x*x+;
if(n-tmp+<=x)
ans+=+(x-)*;
else
ans+=+(x-)*;
cout<<ans<<endl;
}
}
return ;
}