網易2019實習生招聘程式設計題之數對

2021-09-25 20:04:30 字數 1841 閱讀 4968

時間限制:1秒  空間限制:32768k
牛牛以前在老師那裡得到了乙個正整數數對(x, y), 牛牛忘記他們具體是多少了。

但是牛牛記得老師告訴過他x和y均不大於n, 並且x除以y的餘數大於等於k。

牛牛希望你能幫他計算一共有多少個可能的數對。

輸入包括兩個正整數n,k(1 <= n <= 10^5, 0 <= k <= n - 1)。
對於每個測試用例, 輸出乙個正整數表示可能的數對數量。
輸入: 5 2

輸出: 7

說明: 滿足條件的數對有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)

首先想到的肯定是列舉法,但對於n < =100000來說,肯定會超過時間的限制考慮條件x除以y的餘數大於等於k,所以除數y∈[

k+1,

n]

y\in[k+1,n]

y∈[k+1

,n]假設x是[0,n]之間的任意值,那麼在這段區間至少可以分成n/y個完整的,長度為y的區間:x = [1……y-2,y-1,y] [y+1,……,2y-1,2y]……[……]…… [……,n],在每個區間上,除以y的餘數分別是1,2,······,y-1,0,滿足x除以y的餘數大於等於k的有y-k個;對於最後一段,長度可能不夠y,計算該區間上滿足條件的個數為:n%y-k+1

由於x除以y的餘數大於等於k,所以y=3,4,5y=3,x被分為[1,2,3] [4,5]5%3 =1個完整區間 每個區間內有y-k=3-2=1個滿足條件,對於最後一段區間長度不夠y=3,用n%y-k+1=5%3-2+1=1個滿足條件;

同理y=4 有n%y*(y-k)+n%y-k+1=5%4*(4-2)+5%4-2+1=2個滿足條件;

y=5 ,沒有不完整段,所以有n%y*(y-k)=5%5*(5-2)=3個滿足條件;

綜上:共有7個滿足條件;

if __name__ ==

"__main__"

: n,k =

map(

int,

input()

.split())

count =

0if k ==0:

# k = 0是一種特殊情況

count = n * n

else

:for i in

range

(k+1

,n+1):

count +=

(n // i)

*(i - k)

+max(0

,(n % i)

- k +1)

#此處需注意 如果用以下**代替會出現錯誤情況,如k = 4, n = 5時,5 % 4 - 4 + 1 = -4 ,此時最後一段滿足的個數為0,而不會是複數

# for i in range(k+1,n+1):

#count += (n // i) *(i - k)

# if n % i != 0:

# count = count + (n % i) - k + 1

print

(count)

網易2019實習生招聘程式設計題集合

為了找到自己滿意的工作,牛牛收集了每種工作的難度和報酬。牛牛選工作的標準是在難度不超過自身能力值的情況下,牛牛選擇報酬最高的工作。在牛牛選定了自己的工作後,牛牛的小夥伴們來找牛牛幫忙選工作,牛牛依然使用自己的標準來幫助小夥伴們。牛牛的小夥伴太多了,於是他只好把這個任務交給了你。小q得到乙個神奇的數列...

網易2019實習生招聘程式設計題 牛牛找工作

為了找到自己滿意的工作,牛牛收集了每種工作的難度和報酬。牛牛選工作的標準是在難度不超過自身能力值的情況下,牛牛選擇報酬最高的工作。在牛牛選定了自己的工作後,牛牛的小夥伴們來找牛牛幫忙選工作,牛牛依然使用自己的標準來幫助小夥伴們。牛牛的小夥伴太多了,於是他只好把這個任務交給了你。輸入描述 每個輸入包含...

網易2019實習生招聘程式設計題(牛牛的鬧鐘)

題目 牛牛總是睡過頭,所以他定了很多鬧鐘,只有在鬧鐘響的時候他才會醒過來並且決定起不起床。從他起床算起他需要x分鐘到達教室,上課時間為當天的a時b分,請問他最晚可以什麼時間起床 輸入描述 每個輸入包含乙個測試用例。每個測試用例的第一行包含乙個正整數,表示鬧鐘的數量n n 100 接下來的n行每行包含...