日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 拼多多秒杀_关于 拼多多笔试题-简单易懂的秒杀服务

發布時間:2025/4/16 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 拼多多秒杀_关于 拼多多笔试题-简单易懂的秒杀服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實現一個簡易的秒殺服務,有3個接口:

1. 添加一個秒殺活動 addActivity(int startTime, int endTime, int goodsId, int limitQuantity)

參數說明:

* 時間區間為左閉右開:[startTime, endTime) 。數據保證 startTime < endTime,startTime 大于當前時間戳

* goodsId 一定為存在的商品id。每個goodsId至多添加一次秒殺活動。

* limitQuantity > 0

返回值有以下兩種情況:

* 添加成功,返回秒殺活動ID (從0開始自增)

* 秒殺商品數量大于商品庫存,添加失敗,返回-1

2. 購買秒殺商品 buyGoods(int activityId, int quantity)

參數說明:

* activityId 一定是請求時存在的活動id

* quantity > 0

返回值有以下三種情況:

* 購買成功,減少庫存,返回0

* 購買數量大于秒殺商品剩余數量,購買失敗,返回-1

* 秒殺未開始或已結束,購買失敗,返回-1

3. 獲取秒殺活動列表 getActivityList() 獲取當前時刻的秒殺活動列表

秒殺列表排序方式:進行中(未售罄) > 進行中(售罄) > 未開始

* 對于「進行中(未售罄)」:依次按商品人氣值從高到低、商品ID從小到大排序

* 對于「進行中(已售罄)」:依次按最后賣出時間從晚到早、商品人氣值從高到低、商品ID從小到大排序

* 對于「未開始」:依次按開始時間從早到晚、商品人氣值從高到低、商品ID從小到大排序

* 對于已結束的秒殺,不返回。

返回秒殺活動id列表

商品擁有以下屬性:

* 商品ID,32位非負整數

* 人氣值,32位非負整數

* 庫存,32位非負整數

現給出一串請求,每個請求的格式為:時間戳 函數名 參數。請對每個請求都輸出其返回結果 (請求已經按照時間先后順序排序過) 。

數據范圍:

* 商品數量 N <= 10,000

* 請求數量 M <= 10,000

* add 數量 A <= 1,000

* buy 數量 B <= 10,000

* list 數量 L <= 100

輸入描述:

第一行是兩個整數 N 和 M ,分別表示商品數量和請求數量。

接下來有 N 行,每行表示一個商品,具體格式為:3個整數(被空格分隔)分別表示商品ID,人氣值,庫存

接下來有 M 行,每行表示一個請求,請求已經按時間戳從小到大排序。

具體格式為:時間戳 請求類型 請求參數...

* 時間戳:正整數

* 請求類型,共三種:"add", "buy" 和 "list"

* 請求參數:按題目描述中的順序,參數之間空格分隔

輸出描述:

對每個請求,輸出其返回值,一個請求的輸出占一行:

* add:成功輸出id,失敗輸出-1

* buy:成功輸出0,失敗輸出-1

* list:輸出活動id列表,按要求的順序,相鄰數字之間用一個空格分隔。若列表為空,則輸出空行。

示例1

輸入

6 13

1001 1 10

1002 1 10

1003 2 10

1004 2 10

1005 2 10

1006 3 10

1 add 2 20 1001 10

2 buy 0 1

3 buy 0 10

4 add 5 6 1002 2

5 list

6 buy 1 1

7 add 10 20 1003 11

8 add 10 20 1003 8

9 add 10 20 1004 3

10 add 11 20 1005 5

11 add 20 30 1006 1

12 buy 3 3

13 list

輸出

0

0

-1

1

0 1

-1

-1

2

3

4

5

0

2 4 0 3 5

下面是我的python 解法,由于題目復雜,當時一下沒A出來,后來補全了下

s = raw_input().split(" ")

n, m = int(s[0]), int(s[1])

class Good(object):

def __init__(self, good_id, pop, num):

self.good_id = good_id

self.pop = pop

self.num = num

class Activity(object):

index = 0

def __init__(self, start_time, end_time, good_object, limit):

self.start_time = start_time

self.end_time = end_time

self.good_object = good_object

self.limit = limit

self.last_sell = 0

self.activity_id = Activity.index

Activity.index += 1

goods_dict = dict()

for i in xrange(n):

s = raw_input().split(" ")

good_id = int(s[0])

pop = int(s[1])

num = int(s[2])

goods_dict[good_id] = Good(good_id, pop, num)

unstart_dict = dict()

running_dict = dict()

empty_dict = dict()

def update(moment):

del_list = []

for key, item in empty_dict.iteritems():

if item.end_time <= moment:

del_list.append(key)

for key in del_list:

del empty_dict[key]

del_list = []

for key, item in running_dict.iteritems():

if item.end_time <= moment:

del_list.append(key)

continue

if item.limit <= 0:

empty_dict[key] = item

del_list.append(key)

for key in del_list:

del running_dict[key]

del_list = []

for key, item in unstart_dict.iteritems():

if item.start_time <= moment:

running_dict[key] = item

del_list.append(key)

for key in del_list:

del unstart_dict[key]

# print "unstart_dict", str(unstart_dict)

# print "running_dict", str(running_dict)

# print "empty_dict", str(empty_dict)

for i in xrange(1, m + 1):

update(i)

s = raw_input().split(" ")

op = s[1]

if op == "add":

start_time = int(s[2])

end_time = int(s[3])

good_id = int(s[4])

limit = int(s[5])

if limit > goods_dict[good_id].num:

print -1

continue

activity = Activity(start_time, end_time, goods_dict[good_id], limit)

unstart_dict[activity.activity_id] = activity

print activity.activity_id

elif op == "buy":

activity_id = int(s[2])

quantity = int(s[3])

if activity_id in running_dict and running_dict[activity_id].limit >= quantity:

running_dict[activity_id].limit -= quantity

running_dict[activity_id].good_object.num -= quantity

running_dict[activity_id].last_sell = i

print 0

else:

print -1

elif op == "list":

def cmp_unstart(x, y):

if x.start_time == y.start_time:

if x.good_object.pop == y.good_object.pop:

return x.good_object.good_id - y.good_object.good_id

return y.good_object.pop - x.good_object.pop

return x.start_time - y.start_time

def cmp_running(x, y):

if x.good_object.pop == y.good_object.pop:

return x.good_object.good_id - y.good_object.good_id

return y.good_object.pop - x.good_object.pop

def cmp_empty(x, y):

if x.last_sell == y.last_sell:

if x.good_object.pop == y.good_object.pop:

return x.good_object.good_id - y.good_object.good_id

return y.good_object.pop - x.good_object.pop

return y.last_sell - x.last_sell

unstart_list = sorted(unstart_dict.values(), cmp=cmp_unstart)

running_list = sorted(running_dict.values(), cmp=cmp_running)

empty_list = sorted(empty_dict.values(), cmp=cmp_empty)

for activity in running_list:

print activity.activity_id,

for activity in empty_list:

print activity.activity_id,

for activity in unstart_list:

print activity.activity_id,

print ""

大家看下有沒有更好的方法~

總結

以上是生活随笔為你收集整理的python 拼多多秒杀_关于 拼多多笔试题-简单易懂的秒杀服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。