Enclosure POJ

0:Enclosure

http://poj.openjudge.cn/challenge3/0/ios

总时间限制: 
1000ms
 
内存限制: 
131072kB
描述

为了防止爆零而加入了一道热身题。你们轻虐~

Picks在参加NOI(网上同步赛)时,看到你们都在疯狂讨论“圈地游戏”,因而Picks对这个游戏很!好!奇!他想本身开发一个Bot来玩。

测试


不过Picks水平不行……写一个复杂的程序对他太难了,因而他简化了一下,使得场上只有他写的Bot,且场地大小无限。spa


圈地游戏的规则是:Bot可以水平或者纵向移动 1 格,每次移动能够选择是否落笔,在落笔状态下就会画出轨迹。每当曾经本身走到的轨迹上时,围成的封闭图形就归它全部,获得这块区域的分数,而且轨迹消失。

请注意!在本题中,获得的分为圈住的地的面积。

为了打倒他的幻想对手,他给本身限定了一个分数 K,只有在得分很多于 K 时他才会知足。他很想知道他最少要移动多少次?code

 

数据范围
blog

输入
一个测试点中有多组数据(不超过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==1){
            puts("4");
        }else if(n==2){
            puts("6");
        }else if(n==3 || n==4){
            puts("8");
        }else{
            long long ans=8;
            long long x=(long long)sqrt(n-1);
            long long tmp=x*x+1;
            if(n-tmp+1<=x)
                ans+=2+(x-2)*4;
            else
                ans+=4+(x-2)*4;
            cout<<ans<<endl;
        }
    }
    return 0;
}
相关文章
相关标签/搜索