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;
}
相關文章
相關標籤/搜索