完之後的第一篇題解
ZYB建圍牆(wall)
題目描述
ZYB之國是特殊的六邊形構造。
已知王國一共有戶家庭,每個家庭需佔據一個不同的六邊形格子。
王國裏交流很頻繁,所以這些家庭要構成一個連通區域;同時出於安全考慮,國王想在外面“圍”一圈牆。
圍牆需要遵守這樣的規則:
-
牆也是建在格子上的。
-
牆不能建在任何一戶家庭佔據的格子上。
-
任何一戶家庭都不可能走到圍牆外面去。
-
圍牆不一定要“貼”着家庭建,可以多圍一些格子。
定義圍牆的長度爲它佔據的格子的數量。
請你幫國王安排每戶家庭的具體位置以及圍牆的建造方案,使得圍牆的長度最短。
輸入
只讀入一個數,表示家庭的數量N。
輸出
輸出一個數表示圍牆的最小長度。
樣例輸入
樣例輸入1
6
樣例輸入2
9
樣例輸出
樣例輸出1
12
樣例輸出2
14
提示
前: 。
前: 。
前: 。
另有
前 。
題解
對於前40分,大概手推是可以推出來的(千萬不要數數數錯 )
然後手推完前四十分,大概後面規律是可以找出來的:
對於六條邊,設邊長爲
所以每條邊答案變化即爲:
,,,,,
直接計算即可
#include<bits/stdc++.h>
using namespace std;
#define J if(n>0)
long long n,ans;
int main(){
scanf("%lld",&n); ans=6;n--;
for(int i=1;;i++){
if(n<=0) break;
J n-=i-1,ans++;
J n-=i,ans++;
J n-=i,ans++;
J n-=i,ans++;
J n-=i,ans++;
J n-=i+1,ans++;
}
printf("%lld",ans);
return 0;
}