Enclosure POJ


0:Enclosure
http://poj.openjudge.cn/challenge3/0/
表示
送信
統計
に質問
合計時間制限: 
1000ms
 
メモリの制限: 
131072kB
説明
爆零を防ぐためにウォーミングアップ問題が加わった.みんな軽虐~Picks NOI(オンラインシンクロ)に参加した时、みんなが狂ったように「サークルゲーム」を讨论しているのを见て、Picksはこのゲームに対してとても!よし!おかしい!彼は自分でBotを開発して遊びたいと思っている.Enclosure POJ
しかしPicksのレベルはだめです......複雑なプログラムを書くのは彼には難しいので、彼は簡略化して、フィールドに彼が書いたBotしかなくて、フィールドの大きさは無限です.
リングゲームのルールは、Botが水平または縦に1コマ移動でき、移動するたびに落書きするかどうかを選択でき、落書き状態で軌跡を描くことです.自分が歩いた軌跡の上にいるたびに、囲まれた閉じた図形がすべてになり、この領域の点数が得られ、軌跡が消える.ご注意ください.本題で得られるのは,囲いの地の面積である.彼の幻想的な相手を倒すために、彼は自分に点数Kを限定して、得点がKより少なくない時だけ彼は満足します.彼は少なくとも何回移動するか知りたいと思っています.
 
データ範囲
Enclosure POJ
入力
1つのテストポイントに複数のデータがあります(10グループを超えません).データのグループごとに:
1行、1つの数:K、意味は問題のようです.
しゅつりょく
データのグループごとに:
1行、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;

}