外卖店优先级

思想: 模拟+枚举

以T为单位的枚举一定会超时;

若以m为单位 比较复杂

以 n 为单位 且为外侧循环, 以它的订单为内层循环(sort一下)

#include <bits/stdc++.h>
using namespace std;
#define ri register int 
#define M  100005 

vector <int> p[M];
int n,m,T;
int main(){
    
    scanf("%d%d%d",&n,&m,&T);
    
    for(ri i=1;i<=m;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        p[b].push_back(a);
    }
    
    int ans=0;
    for(ri i=1;i<=n;i++)
    {
        sort(p[i].begin(),p[i].begin()+p[i].size());
        int trmp=0;
        int cur=0;
        for(ri j=0;j<p[i].size();j++)
        {
            int a=p[i][j];
            
            if(a!=trmp)
            cur-=(a-trmp-1);   
                
            if(cur<0) cur=0;
            
            cur+=2;
            
            trmp=a;
            if(cur-(T-a)>=4&&cur>5)
            {
                ans++;
                break;
            }    
        }
    }
    printf("%d",ans);
    return 0; 
}
View Code

反思: 实现代码的时候 一定要确保你的代码 表达的 意思 和你想的一样, 

                                                                        和 模拟的情况一样,多举点栗子 去验证 代码。多想想各种情况。

            样例过了,可能只是某一种情况而已,自己仔细想想,特别是模拟的题

原文地址:https://www.cnblogs.com/Lamboofhome/p/15612734.html