日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

U92904-画地为佬【二分,结论】

發(fā)布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 U92904-画地为佬【二分,结论】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.org/problem/U92904?contestId=23574


題目大意

mmm根長度為1的火柴求能夠圈住的最塊的地。


解題思路

顯然如果剛好能夠圍成一個正方形那么一定是最優(yōu)的,那么我們先將能夠圍成的圍成一個最大的正方形,然后剩下的在邊邊圍。

為什么是最優(yōu)的?首先若最大圍成一個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個塊,那剩下的在邊上圍就是最優(yōu)的。

然后二分答案即可


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

總結(jié)

以上是生活随笔為你收集整理的U92904-画地为佬【二分,结论】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。