位元組跳動 程式題 萬萬沒想到之抓捕孔連順

2021-10-07 07:25:10 字數 2466 閱讀 2240

我叫王大錘,是一名**。我剛剛接到任務:在位元組跳動大街進行埋伏,抓捕****孔連順。和我一起行動的還有另外兩名**,我提議

我們在位元組跳動大街的n個建築中選定3個埋伏地點。

為了相互照應,我們決定相距最遠的兩名**間的距離不超過d。

我特喵是個天才! 經過精密的計算,我們從x種可行的埋伏方案中選擇了一種。這個方案萬無一失,顫抖吧,孔連順!

……萬萬沒想到,計畫還是失敗了,孔連順化妝成小龍女,混在cosplay的隊伍中逃出了位元組跳動大街。只怪他的偽裝太成功了,就是楊過本人來了也發現不了的!

請聽題:給定n(可選作為埋伏點的建築物數)、d(相距最遠的兩名**間的距離的最大值)以及可選建築的座標,計算在這次行動中,大錘的小隊有多少種埋伏選擇。

注意:兩個**不能埋伏在同一地點

三個**是等價的:即同樣的位置組合(a, b, c) 只算一種埋伏方法,不能因「**之間互換位置」而重複使用

第一行包含空格分隔的兩個數字 n和d(1 ≤ n ≤ 1000000; 1 ≤ d ≤ 1000000)

第二行包含n個建築物的的位置,每個位置用乙個整數(取值區間為[0, 1000000])表示,從小到大排列(將位元組跳動大街看做一條數軸)

乙個數字,表示不同埋伏方案的數量。結果可能溢位,請對 99997867 取模

輸入示例143

1234

輸出4

輸入示例2519

1102030

50輸出

1

最簡單的方法則是使用窮舉法,三個位置設定三個迴圈,符合規則,則數量加1

但是時間複雜度比較大

採用排列組合的方法

def

work

(n,d)

: j=

0 count=

0for i in

range

(len

(n))

:if i<2:

continue

while n[i]

-n[j]

>d:

j+=1 p=i-j

count+=p*

(p-1)/

2return

int(count)

%99997867

m=list

(map

(int

,input()

.split())

)n=list

(map

(int

,input()

.split())

)print

(work(n,m[1]

))

以輸入示例一為例:12

34

每一輪首先確定最後乙個元素

比如當i=

3時,j=

0符距離要求

那麼前兩個元素則從1

23裡面選

組合有:

=p*

(p-1)/

2種

為:(1,2, 4),(1,3,4),(2,3,4)

位元組跳動 萬萬沒想到之抓捕孔連順

我叫王大錘,是一名 我剛剛接到任務 在位元組跳動大街進行埋伏,抓捕 孔連順。和我一起行動的還有另外兩名 我提議 1.我們在位元組跳動大街的n個建築中選定3個埋伏地點。2.為了相互照應,我們決定相距最遠的兩名 間的距離不超過d。我特喵是個天才 經過精密的計算,我們從x種可行的埋伏方案中選擇了一種。這個...

牛客網位元組跳動演算法題 萬萬沒想到之抓捕孔連順

題意 輸入乙個n,d,n代表n個點,d間隔代表最大距離,然後輸入n個點 問有多少種組合,三個點的最大差值小於d 解題思路 當兩點距離剛好在範圍內時,通過規律可以發現 此時的組合為 n n 1 2,那麼只需尋找極限距離即可 這個規律怎麼找呢?先拿出乙個固定點,其餘兩點在不重複的情況下的組合就是答案 i...

位元組跳動 萬萬沒想到之聰明的編輯

萬萬沒想到之聰明的編輯 三個同樣的字母連在一起,一定是拼寫錯誤,去掉乙個的就好啦 比如 helllo hello 兩對一樣的字母 aabb型 連在一起,一定是拼寫錯誤,去掉第二對的乙個字母就好啦 比如 helloo hello 上面的規則優先 從左到右 匹配,即如果是aabbcc,雖然aabb和bb...