题意:n道题,每道题需要一个模板,现在手头有m个模板(标号1~m),解题的时候,如果没有需要的模板,可以向朋友借,但是用完之后必须在还给朋友一个模板(也就是说保持手头拥有m个模板),求解完n道题最少需要向朋友请求多少次帮助。

思路:贪心,每次抛弃模板的时候抛弃下次使用最靠后的那一个。(怎么想到的。。怎么证明。)

#include<iostream>
#include<stdio.h>
#include<map>
#include<set>
using namespace std; const int MAXN=; int Ti[MAXN];//模板标号
int _next[MAXN];//下个模板位置
map<int,int>mp;//模板出现位置 struct Node{
int next_id;//下个模板位置
int ti;//当前标号
}; struct classCompare{
bool operator()(const Node &a,const Node &b)const{
return a.next_id<b.next_id;//升序
}
}; multiset<Node,classCompare>T_info;//模板信息
multiset<Node>::iterator it_n;
set<int>Te;//模板标号
set<int>::iterator it; int main(){
int n,m,i,ans;
Node temp;
while(~scanf("%d%d",&n,&m)){
for(i=;i<=n;++i)scanf("%d",&Ti[i]);
mp.clear();//清空map
for(i=n;i>=;--i){//从后往前扫描
if(mp[Ti[i]])//出现过
_next[i]=mp[Ti[i]];
else _next[i]=n+;
mp[Ti[i]]=i;
}
Te.clear();
T_info.clear();
for(i=;i<=m;++i){//把带的m个模板加入set
if(!mp[i])mp[i]=n+;
temp.next_id=mp[i];
temp.ti=i;
Te.insert(i);
T_info.insert(temp);
}
ans=;
for(i=;i<=n;++i){//遍历每道题需要的模板
it=Te.find(Ti[i]);
if(it!=Te.end()){
temp.next_id=i;
temp.ti=Ti[i];
T_info.erase(temp);
temp.next_id=_next[i];//更新
T_info.insert(temp);
}
else{
++ans;
it_n=T_info.end();//
--it_n;//最靠后的一个
if(_next[i]<(*it_n).next_id){
Te.erase((*it_n).ti);
T_info.erase(it_n);
Te.insert(Ti[i]);
temp.next_id=_next[i];
temp.ti=Ti[i];
T_info.insert(temp);
}
}
}
printf("%d\n",ans);
}
return ;
}

hdu 4398 Template Library Management(贪心+stl)的更多相关文章

  1. HDU 4398 Template Library Management (最优页面调度算法)

    中等偏易题.操作系统理论中的最优页面调度算法,贪心.当需要淘汰某个模版时,淘汰掉当前手中在最远的将来才会被用到(或者以后永远不再用到)的那个. 代码: #include <iostream> ...

  2. HDU 4268 Alice and Bob 贪心STL O(nlogn)

    B - Alice and Bob Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u D ...

  3. hdu 4398 STL

    题意描述半天描述不好,直接粘贴了 Now your team is participating a programming contest whose rules are slightly diffe ...

  4. [c++] STL = Standard Template Library

    How many people give up, because of YOU. Continue... 先实践,最后需要总结. 1. 数据流中的数据按照一定的格式<T>提取 ------ ...

  5. C++ Standard Template Library STL(undone)

    目录 . C++标准模版库(Standard Template Library STL) . C++ STL容器 . C++ STL 顺序性容器 . C++ STL 关联式容器 . C++ STL 容 ...

  6. Simple Library Management System HDU - 1497(图书管理系统)

    Problem Description After AC all the hardest problems in the world , the ACboy 8006 now has nothing ...

  7. Calibre - book library management application

    http://calibre-ebook.com/ Library Management E-book conversion Syncing to e-book reader devices Down ...

  8. hdu 4825 Xor Sum(trie+贪心)

    hdu 4825 Xor Sum(trie+贪心) 刚刚补了前天的CF的D题再做这题感觉轻松了许多.简直一个模子啊...跑树上异或x最大值.贪心地让某位的值与x对应位的值不同即可. #include ...

  9. django升级2.1python升级3.7时出现的错误:"trying to load '%s': %s" % (entry[1], e) django.template.library.InvalidTemplateLibrary:

    django升级2.1python升级3.7时出现如下的错误: "trying to load '%s': %s" % (entry[1], e) django.template. ...

随机推荐

  1. HDU 1242 dFS 找目标最短路

    //多个起点,要最短得目标,不妨倒过来从目标出发,去找最近的点更新!!!!!!递归时思路要清楚 #include<iostream> #include<cstring> usi ...

  2. P2136 拉近距离(spfa判负环)

    洛谷—— P2136 拉近距离 题目背景 我是源点,你是终点.我们之间有负权环. ——小明 题目描述 在小明和小红的生活中,有N个关键的节点.有M个事件,记为一个三元组(Si,Ti,Wi),表示从节点 ...

  3. java通过反射获取bean字段注解@Column中的信息

    直接上代码吧: Field field; Field[] fields=clas.getDeclaredFields(); for (int i = 0; i <fields.length ; ...

  4. 7.Java web—tomcat9部署

    1)安装 在此之前要安装 好jdk和jre 下载绿色版 http://tomcat.apache.org/ 解压至:D:\Program Files (x86)\tomcat9 环境变更path添加两 ...

  5. js -- 监听窗口的大小变化

  6. graphviz的使用

    安装:brew install graphviz 使用:dot -Tpng *.dot -o *.png 把dot文件转换为图片,* 换成具体的文件名, 这样你就成功的用脚本渲染出你要绘制的图片啦 参 ...

  7. Application具体解释(一)

     1:Application是什么? Application和Activity,Service一样,是android框架的一个系统组件.当android程序启动时系统会创建一个 applicati ...

  8. C++常用字符串分割方法

    一.用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串. 参数说明:str为要分解的字符串, ...

  9. HTML--比较实用的小例子

    常用的前端实例: 1略 2.在网页商城中的图片当我们把鼠标放上去之后,图片会显示一个有颜色的外边框,图片某一部分的字体的颜色并发生改变 鼠标放上去之前 鼠标放上去之后: 实现的代码: <!DOC ...

  10. redux 及 相关插件 项目实战

    目录结构 +-- app | +-- actions | +-- index.js | +-- components | +-- content.js | +-- footer.js | +-- se ...