外賣店優先順序

2021-10-03 19:06:01 字數 1971 閱讀 2927

歡迎來訪

題目鏈結

拿到題目之後,首先想想暴力的做法,暴力的做法按照時間列舉,在某個時間點上列舉所有的外賣店若是有訂單優先順序就加上cnt(訂單的數量) * 2,否則就減去1,再按照優先順序的數值判斷是否在優先快取中。列舉完所有時間以後,再看t時刻的優先快取中的外賣店的數量。這種暴力的時間複雜度我寫的**是o(n

∗t+m

∗t

)o(n * t + m * t)

o(n∗t+

m∗t)

,顯然是會超時的。

然後再想怎麼優化,再按照時間列舉的過程中,其實對於某個店鋪來說在很多時間上是沒有訂單的,比如說t1到t2時刻中i店鋪沒有訂單,則t2時刻的優先順序應該為:max(0, score[i] - (t2 - t1 - 1)) + 2,這樣就避免了列舉中間沒有訂單的時間點。

暴力列舉 o(n

∗t+m

∗t

)o(n * t + m * t)

o(n∗t+

m∗t)

在acwing上過了9個點,考場上想不到最優解就寫暴力吧,畢竟還是有部分分的。

#include

#include

#include

#include

using

namespace std;

#define x first

#define y second

typedef pair<

int,

int> pii;

const

int n =

100010

;int n, m, t;

pii orders[n]

;int score[n]

;bool st[n]

;bool f[n]

;int

main()

}for

(int j =

1; j <= n; j++)if

(!f[j]

)memset

(f,false

,sizeof

(f));}

int res =0;

for(

int i =

1; i <= n; i++)if

(st[i]

) res++

;printf

("%d"

, res)

;return0;

}

優化 o(m

)o(m)

o(m)

#include

#include

#include

#include

using

namespace std;

#define x first

#define y second

typedef pair<

int,

int> pii;

const

int n =

100010

;int n, m, t;

int score[n]

, last[n]

;bool st[n]

;pii orders[n]

;int

main()

for(

int i =

1; i <= n; i++)}

int res =0;

for(

int i =

1; i <= n; i++)if

(st[i]

) res++

;printf

("%d"

, res)

;return0;

}

acwing

1241 外賣店優先順序

飽了麼 外賣系統中維護著 n 家外賣店,編號 1 n 每家外賣店都有乙個優先順序,初始時 0 時刻 優先順序都為 0 每經過 1 個時間單位,如果外賣店沒有訂單,則優先順序會減少 1 最低減到 0 而如果外賣店有訂單,則優先順序不減反加,每有一單優先順序加 2 如果某家外賣店某時刻優先順序大於 5 ...

送外賣優先順序 AcWing1241 外賣店優先順序

外賣店優先順序 一定對的做法,模擬每個時刻的情況 判斷哪些店有訂單哪些店沒有訂單 10 5次方 離散的有很多個訂單,把中間壓縮掉,連續沒有訂單的,放到購買訂單那裡處理 將所有訂單按照時間順序排序,一次處理一批訂單相同的訂單,相同時刻 模擬題偽 比較重要 include include include...

第十屆藍橋杯A組(C C 組) 外賣店優先順序

這道題還是列舉的思路,另外還運用到了vector容器。就是按時間乙個乙個出訂單,沒出乙個判斷一次,判斷此刻店的狀態。把問題劃分為一家一家店的小問題。include include includeusing namespace std const int maxm 100000 vectora max...