Supermarket

Supermarket

https://ac.nowcoder.com/acm/problem/50995

正好是我做过的题嘻嘻
代码附上:

#include<bits/stdc++.h>
using namespace std;
int n,len,ans,heap[10005];
struct node{int p,d;}a[10005];
bool cmp(node x,node y){return x.d<y.d;}
void up(int p){
    while(p>1){
        if (heap[p]<heap[p/2]){swap(heap[p],heap[p/2]);p/=2;}
        else break;
    }
}
void down(int p){
    int s=p*2;
    while(s<=len){
        if (s<len&&heap[s]>heap[s+1])++s;
        if (heap[s]<heap[p]){swap(heap[s],heap[p]);p=s;s=p*2;}
        else break;
    }
}
void insert(int x){heap[++len]=x;up(len);}
void extract(){heap[1]=heap[len--];down(1);}
int main(){
    while(scanf("%d",&n)!=EOF){
        len=0;ans=0;memset(heap,0,sizeof (heap));
        for(int i=1;i<=n;++i)scanf("%d%d",&a[i].p,&a[i].d);
        sort(a+1,a+n+1,cmp);
        for(int i=1;i<=n;++i){
            if (a[i].d==len&&a[i].p>heap[1]){extract();insert(a[i].p);continue;}
            else if (a[i].d>len)insert(a[i].p);
        }
        for(int i=1;i<=len;++i)ans+=heap[i];
        printf("%d\n",ans);
    }
    return 0;
}

看在我写了题解的份上,点个赞再走呗~

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务