U92904-画地为佬【二分,结论】
生活随笔
收集整理的這篇文章主要介紹了
U92904-画地为佬【二分,结论】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目鏈接:https://www.luogu.org/problem/U92904?contestId=23574
題目大意
用mmm根長度為1的火柴求能夠圈住的最多塊的地。
解題思路
顯然如果剛好能夠圍成一個正方形那么一定是最優的,那么我們先將能夠圍成的圍成一個最大的正方形,然后剩下的在邊邊圍。
為什么是最優的?首先若最大圍成一個k?kk*kk?k的正方形,剩下的材料一定不夠在邊上圍出2?k+12*k+12?k+1個塊,因為如果可以,就可以圍出(k+1)?(k+1)(k+1)*(k+1)(k+1)?(k+1)的正方形,那如果不超過2?k2*k2?k個塊,那剩下的在邊上圍就是最優的。
然后二分答案即可
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; ll T,n,ans; int main() {scanf("%lld",&T);while(T--){scanf("%lld",&n);ll l=0,r=1e9;ans=0;while(l<=r){ll mid=(l+r)/2;if(2*mid*mid+mid+mid<=n) l=mid+1;else r=mid-1;}ans+=r*r;n-=2*r*r+r+r;if(r&&n>=3){ans++,n-=3;ans+=min(n/2,r-1);n-=min(n/2,r-1)*2;}if(r&&n>=3){ans++,n-=3;ans+=min(n/2,r-1);n-=min(n/2,r-1)*2;}printf("%lld\n",ans);} }總結
以上是生活随笔為你收集整理的U92904-画地为佬【二分,结论】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: U94222-循环往复【tarjan,D
- 下一篇: 再接再励是什么意思 再接再励解释