牛客網 NC204859 組隊 滑動視窗

2021-10-23 07:02:09 字數 2096 閱讀 5812

2. 解讀

3. **

time limit: c/c++ 1秒,其他語言2秒

memory limit: c/c++ 262144k,其他語言524288k

你的團隊中有 n

nn 個人,每個人有乙個能力值 a

ia_i

ai​,現在需要選擇若干個人組成乙個團隊去參加比賽,由於比賽的規則限制,乙個團隊裡面任意兩個人能力的差值必須要小於等於 k

kk,為了讓更多的人有參加比賽的機會,你最多能選擇多少個人參加比賽?

第一行乙個整數 t

tt,表示案例組數。每個案例有兩行:第一行兩個正整數 n,k

n,kn,

k,表示人的數量。第二行n個以空格分隔的整數a_i,表示每個人的能力值。

每個案例輸出一行,表示可以參加比賽的最多人數。

153

8351

6

3
選擇能力值為 3,5

,63, 5, 6

3,5,

6 或 5,6

,85, 6, 8

5,6,8。

t ≤10

t \leq 10

t≤10

1 ≤n

≤2e5

1 \leq n \leq 2e5

1≤n≤2e51≤

k≤1e

91 \leq k \leq 1e9

1≤k≤1e

91<=a

i<=1

e91 <= a_i <= 1e9

1<=a

i​<=1

e9牛客網 nc204859 組隊

使用滑動視窗進行計算。

先對陣列從小到大進行排序,如果 [le

ft,r

ight

][left, right]

[left,

righ

t]區間內的數都滿足 lis

t[ri

ght]

−lis

t[le

ft]<=k

list[right] - list[left] <= k

list[r

ight

]−li

st[l

eft]

<=k

,則 rig

ht=r

ight

+1right = right + 1

right=

righ

t+1,否則 lef

t=le

ft+1

left = left + 1

left=l

eft+

1,每滑動一次計算一次 ans

=rig

ht−l

eftans = right - left

ans=ri

ght−

left

,取所有情況的最大值即可。

#include

#include

#include

using

namespace std;

const

int num =

2e5+1;

long

long list[num]

;int

main()

// 排序

sort

(list, list + n)

;// 計算

while

(right < n)

else

ans =

max(ans, right - left);}

printf

("%lld\n"

, ans);}

return0;

}

csdn:

知乎:

牛客網 NC207427 直線 高精度

2.解讀 3.time limit c c 1秒,其他語言2秒 memory limit c c 262144k,其他語言524288k 平面上存在 n nn 條直線。請問 n nn 條直線在平面上最多存在多少交點。輸入資料的第一行是t,表示資料的組數 t 100 t 100 t 10 0 接下來每...

牛客NC18200烟花

總時間限制 1000ms 記憶體限制 262144k 小a有n個烟花,每個烟花代表著互不相同的顏色,對於第i個烟花,它有pi的概率點燃,現在小a要去點燃它們,他想知道產生顏色的期望個數及產生恰好產生k種顏色的概率 第一行兩個整數n,k.接下來一行n個數,第i個數pi表示第i個烟花被點燃的概率 輸出有...

牛客網提高組round 1

1.60pts 用堆來實現維護中位數。用大跟堆維護小於中位數的數,用小跟堆維護比中位數大的數。若兩堆元素之差大於一,把中位數push進較少元素的堆,把較多元素堆的堆頂作為中位數,pop。o n 2log n includeusing namespace std struct cmp1 struct ...