U92904 畫地為佬 二分,結論

2021-09-29 14:17:12 字數 719 閱讀 2565

用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);}

}