BZOJ 1528--sam-Toy Cars(堆&贪心)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ 1528--sam-Toy Cars(堆&贪心)相关的知识,希望对你有一定的参考价值。

    。。。。

题目链接:

    http://www.lydsy.com/JudgeOnline/problem.php?id=1528 

Solution

    用数组记录一下每次玩具下次出现的时间。。。然后每一次贪心把下次出现时间最迟的取出即可。

代码

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<queue>
#include<vector>
#define inf 1000000
using namespace std;
int n,k,p;
int toy[600000],tim[110000],nxt[600000];
bool c[110000];
priority_queue< pair<int,int> ,vector< pair<int,int> > >q;
int main(){
    int ans=0;
    scanf("%d%d%d",&n,&k,&p);
    for(int i=1;i<=p;i++){
        scanf("%d",&toy[i]);
        nxt[tim[toy[i]]]=i;
        tim[toy[i]]=i;
        nxt[i]=inf;
    }
    int js=0;
    for(int i=1;i<=p;i++){
        if(c[toy[i]]==1){
            q.push(make_pair(nxt[i],toy[i]));
            continue;
        }
        if(js==k){
            while(c[q.top().second]==0) q.pop(); 
            c[q.top().second]=0;
            q.pop();
            js--;
        }
        js++;
        ans++;
        c[toy[i]]=1;
        q.push(make_pair(nxt[i],toy[i]));
    }
    printf("%d\n",ans);
    return 0;
}

  

  

This passage is made by Iscream-2001.

 

以上是关于BZOJ 1528--sam-Toy Cars(堆&贪心)的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ1623 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心

bzoj 1623: [Usaco2008 Open]Cow Cars 奶牛飞车排序+贪心

bzoj1528[POI2005]sam-Toy Cars*&&bzoj1826[JSOI2010]缓存交换

BZOJ 1623 [Usaco2008 Open]Cow Cars 奶牛飞车:贪心

BZOJ_1623:_[Usaco2008_Open]_Cow_Cars_奶牛飞车_(贪心)

POI每日一题 #2 SAM-Toy Cars