重新練習下二分法,發現還是手速不夠
從這道題學到一下幾點:
1、線性分幾段的方法,看我的Judge()代碼;
2、二分的while()最終打印的是down,而不是mid(我代碼裡寫的是ans),或者up,
這麼想:跳出循環的時候,假設while裡的判斷,Judge(ans)==1,那麼down是正確解,up不是
Judge(ans)==0,那麼ans跟up都不是正確解
綜上,打印down才能輸出正確解
3、調了好一會二才發現的bug:Judge函數裡,if(cnt
貼代碼:
#include#include #include #include using namespace std; const int MAXN = 100000+10; int n,c; int dis[MAXN]; int Judge(int s) { int cnt=0,last=0,now=0; while(now 1) { ans=(up+down)/2; if(Judge(ans))down=ans; else up=ans; } printf(%d ,down);//??ans? } }