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 ...