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

2021-10-12 13:23:01 字數 1332 閱讀 7863

外賣店優先順序

一定對的做法,模擬每個時刻的情況

判斷哪些店有訂單哪些店沒有訂單

10^5次方

離散的有很多個訂單,把中間壓縮掉,連續沒有訂單的,放到購買訂單那裡處理

將所有訂單按照時間順序排序,一次處理一批訂單相同的訂單,相同時刻

模擬題偽**比較重要

#include

#include

#include

#include

#define x first

#define y second

using namespace std;

typedef pair pii;

const int maxn = 1e5 + 10;

int score[maxn], last[maxn];

pii order[maxn];

bool st[maxn];

int n, m, t;

int main()

cin >> n >> m >> t;

for (int i = 0; i < m; i++)

scanf("%d %d", &order[i].x, &order[i].y);

sort(order, order + m);

for(int i = 0; i < m;)

int j = i;

while(j < m && order[j] == order[i]) j ++;

int cnt = j - i; // 某一時刻訂單的數量

int ts = order[i].x;

int id = order[i].y;

i = j;

score[id] -= ts - last[id] - 1;

if(score[id] < 0) score[id] = 0;

if(score[id] <= 3) st[id] = false;

score[id] += cnt * 2;

if(score[id] > 5) st[id] = true;

last[id] = ts;

for (int i = 1; i <= n; i++) // 處理1-n,因為有可能有些訂單沒有出現店名

if(last[i] < t)

score[i] -= t - last[i];

if(score[i] <= 3) st[i] = false;

int res;

for(int i = 1; i <= n; i ++) res += st[i]; // 處理1-n

cout << res << endl;

return 0;

外賣店優先順序

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

送外賣優先順序 讀者來稿 當外賣小哥的初體驗

前段時間因為廠裡訂單少,辭退了我們這一批臨時工,找了幾天沒有找到合適的工作,我又失業了。早就聽說,跑外賣很掙錢,又自由,時間可以自己支配。於是,我摩拳擦掌,註冊成為了一名美團眾包騎手。然而,我卻發現,跑外賣遠沒那麼容易,在街道上飛馳亮麗的風景線之後,是多少騎手的無奈和心酸。雖然在這個城市打工2年多了...

1241 外賣店優先順序

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