用m
mm根長度為1的火柴求能夠圈住的最多塊的地。
顯然如果剛好能夠圍成乙個正方形那麼一定是最優的,那麼我們先將能夠圍成的圍成乙個最大的正方形,然後剩下的在邊邊圍。
為什麼是最優的?首先若最大圍成乙個k∗k
k*kk∗
k的正方形,剩下的材料一定不夠在邊上圍出2∗k
+1
2*k+1
2∗k+
1個塊,因為如果可以,就可以圍出(k+
1)∗(
k+1)
(k+1)*(k+1)
(k+1)∗
(k+1
)的正方形,那如果不超過2∗k
2*k2∗
k個塊,那剩下的在邊上圍就是最優的。
然後二分答案即可
#include
#include
#include
#define ll long long
using
namespace std;
ll t,n,ans;
intmain()
ans+
=r*r;
n-=2
*r*r+r+r;
if(r&&n>=3)
if(r&&n>=3)
printf
("%lld\n"
,ans);}
}