給定一系列x軸的點座標,例如 1,3,7,8,9,11這些座標公升序放在陣列中,現在給一根繩子,長度為4,問繩子最多能覆蓋的點數有多少,例如繩子放前面只能覆蓋兩個點,1,3,如果放後面能覆蓋4個點。
題目不難,但也不是太容易想出來,兩個指標前後跑的思路:兩個指標往前走,前面的負責加,後面的負責減,前面的每次都移動,如果點間隔長度大於繩子長度,後面指標移動。
**如下:
#include using namespace std;
#define arraymax 100
/* input:
* pointnumber, segmentlength
* the points
* output:
* the most number of cover points
* input:
* 6 4
* 1 3 7 8 9 11
* output:
* 4*//* 計算線段最多覆蓋點數 */
int calculatenum(int * arr, int pointnum, int seglen)
covermax = (rearptr-frontptr+1) > covermax ? (rearptr-frontptr+1) : covermax;
++rearptr;
} return covermax;
}void main()
printf("%d\n",calculatenum(pointarray,pointnum,seglen));
}
定長繩子最多覆蓋點
題目描述 數軸上從左到右有n個點,a 0 a 1 a n 1 給定一根長度為l繩子,求繩子最多覆蓋其中幾個點?以下面的陣列為例子,如果繩子長度為4,那麼最多覆蓋的點數應該是568這三個點 int a 5 把繩子想成一條蛇。如果長度小於4,那麼就頭一直增長,增長到4的話,就把尾部收短一些,之後就是頭伸...
How many times(最多圓覆蓋的點)
原題 題意 給出n個圓,求某個點使得被覆蓋的圓數量最多。解析 模擬退火過不了,可以參考一下 先二分答案k kk,然後對於答案去跑模擬退火,在計算總距離的時候,只拿出最近的k kk個點的距離和 圓內則為0 那麼這個時候退火就會往更多的點去跑。本地跑的話,大資料都沒有問題,應該是對的,但是套個二分時間複...
覆蓋最多的直線上的點
題庫建設。已知x1,x2,x3,xn是直線上的點,現希望用固定長度固定數量的木條去覆蓋這些點,請編寫程式求最多能夠覆蓋多少點?輸入要求 輸入的第1行為三個整數n,m,k,分別表示直線上點的個數,木條的長度以及數量。輸入的第2行有n個整數,表示座標上的點。輸出要求 輸出1行,為最多能夠覆蓋的點的個數。...